學習遞迴演算法引起的思考

2021-09-29 06:01:53 字數 893 閱讀 6912

最近突然想研究下遞迴演算法到底是什麼執行的,於是寫了一下這段**,debug了不下十次:

1

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至8行**;

遞來:迴圈執行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級...