遞迴是什麼?

2021-09-10 18:05:35 字數 670 閱讀 6827

程式呼叫自身就叫做遞迴。

遞迴一般用來算一些比較麻煩的演算法問題。

遞迴跟迴圈的區別,迴圈注重過程,而遞迴值注重結果。

簡單的來說就是:用迴圈能實現的,遞迴一般可以實現,但是能用遞迴實現的,迴圈不一定能。因為有些題目①只注重迴圈的結束條件和迴圈過程,而往往這個結束條件不易表達(也就是說用迴圈並不好寫);②只注重迴圈的次數而不注重迴圈的開始條件和結束條件(這個迴圈更加無從下手了)。

要想理解遞迴一時半會也弄不明白。但是寫遞迴需要記住三個步驟。

1.首先去找臨界值,即無需計算,獲得的值。

2. 找這一次和上一次的關係

3. 假設當前函式已經可以使用,呼叫自身計算上一次和這一次的關係。

下面是遞迴實現的乙個簡單列子。

/*

sum(100) = sum(99) + 100;

sum(n) = sum(n - 1) + n;

計算1+2+3+…+n的和

*/function sum(n)

return sum(n - 1) + n;

}alert(sum(100));

假如是計算1+2+…+100的和。首先要找出不用去計算就可以得到的值。

1+…+100 ,哪麼1是確定的值。 然後再去找最後一次與上一次的關係。哪麼就可以直接得出 1+…+100的值。

遞迴的精髓是什麼?

有段話來理解遞迴,感覺不錯 你開啟面前這扇門,看到屋裡面還有一扇門。你走過去,發現手中的鑰匙還可以開啟它,你推開門,發現裡面還有一扇門,你繼續開啟它。若干次之後,你開啟面前的門後,發現只有一間屋子,沒有門了。然後,你開始原路返回,每走回一間屋子,你數一次,走到入口的時候,你可以回答出你到底用這你把鑰...

尾遞迴優化到底是什麼?

學資料結構時就知道這個概念,一直沒有研究過。同樣乙個求階乘的函式,首先是平時我們最熟悉的版本,也就是普通遞迴版本 對於func 5 的遞迴呼叫如下 然後是尾遞迴版本的 呼叫圖是這樣的 最大的區別是 對於第一種普通遞迴,每次函式的n f n 1 都要等f n 1 呼叫返回後,再做乘法返回。也就是說,直...

尾遞迴是什麼?效率高很多

這篇文章轉過來的 function foo data 這裡的a data 和b data 都是函式呼叫,但是b data 是函式返回前的最後執行的東西,所以也是所謂的尾位置。例如 function foo1 data function foo2 data function foo3 data 這種就...