最近突然想研究下遞迴演算法到底是什麼執行的,於是寫了一下這段**,debug了不下十次:
1遞迴演算法分為兩部分,一部分是遞來,一部分是歸去;遞迴必須要有終止條件,不然會無限死迴圈下去,例如:上述**的6至8行**;public
static
void
main(string args) 45
public
static
int sum(int
n) 9
system.out.println(n);
10int sumint = sum(n - 1)*n;
11system.out.println(sumint);
12return
sumint;
13 }
遞來:迴圈執行6至9行的**,直到n=1,終止迴圈;(4->3->2->1(終止))
歸去:迴圈執行10至12行**,直到迴圈結束;(2->3->4)
原理也可以理解成入棧跟出棧:
入棧:先從4->3->2->1(終止),得到sum(1)=1;
出棧:2->3->4
可以得到:
sum(2) = sum(n-1) * n = sum(1) * 2 = 1 * 2 = 2;
sum(3) = sum(n-1) * n = sum(2) * 3 = 2 * 3 = 6;
sum(4) = sum(n-1) * n = sum(3) * 4 = 6 * 4 = 24;
可以畫圖來表示下:
各位大佬,純屬個人理解,請勿噴,如有問題,麻煩請指出,非常感謝!
strcpy函式引起的思考
不呼叫庫函式,實現strcpy函式。解釋為什麼要返回char 解說 strcpy的實現 char strcpy char strdest,const char strsrc if null strdest null strsrc 1 throw invalid argument s 2 char s...
Slice 擴容演算法引起的力扣演算法題的思考
今天刷leetcode演算法題回溯演算法,遇到一道題,原題如下 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 在解答過程中 使用了這種方法 大家看有沒有問...
演算法複習1 關於遞迴的思考
昨天在牛客上做了幾個遞迴的題目,分別是斐波那契數列,跳台階,跳台階,矩形覆蓋,這幾個題實際上是同乙個題。以下是題目 1.斐波那契數列 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 n 39 2.跳台階 乙隻青蛙一次可以跳上1級台階,也可以跳上2級...