7 22 遞迴的例子 樓梯演算法

2022-05-13 20:40:36 字數 1050 閱讀 3801

n層階梯的樓梯,每次可以走1~2層階梯,列印列舉所有走法。

// 比如

// 走1層的可能走法 (1種)

// 1

// 走2層的可能走法(2種)

// 1 1

// 2

// 走3層的可能走法(3種)

// 1 1 1

// 1 2

// 2 1

// 走4層的可能走法(5種)

// 1 1 1 1

// 1 1 2

// 2 2

// 2 1 1

// 1 2 1

// 走n層的走法 

privatestaticvoidstep(intn, int a) 

if (sum

<= n - 2) 

}a[x] = i;

step(n, a);}} 

else

if (sum == n - 1) 

}a[x] = 1;

step(n, a);

} else

}system.out.println();

}int

x = 0;// 每次step方法執行到最後的時候,要擦除這次往a陣列中賦的值!

for (int

j = a.length - 1; j >= 0; j--) 

}a[x] = 0;

// 區域性變數是陣列,step方法根據陣列的各位數總和判斷是否再繼續呼叫,當執行到最後,區域性變數陣列

// 又變成結果輸出,step方法順利執行完,此時將執行上一層的step方法,該結果有要作為區域性變數使用

// 如果不改結果,程式邏輯將會出錯!那麼想到要在輸出結果後把變數的上一次賦值擦除,那麼程式能繼續

// 正確執行,然而當上一層的step方法執行完後,又要返回更上一層,此時沒有執行到輸出結果的那個分支,

// 那麼變數又會出錯,所以經分析,應該在每乙個step方法的結束處更改變數。測試成功!

關於走樓梯的遞迴演算法

題目 乙個共有20個台階的樓梯,從下面走到上面。一次只能邁乙個台階或兩個台階,並且不能後退,走完這個樓梯共有多少種方法。分析 1 步台階只有1種走法 1 2步台階2種 11 2 3步台階有3種 111 12 21 4 步台階有5種 1111 112 121 211 22 5 步台階有8種 11111...

走樓梯遞迴遞推的演算法總結

走樓梯的演算法總結 1 一次可以走一階或兩階 2 一次可以走一階或兩階或三階 3 一次可以走一階或兩階,最終走偶數步,或者奇數步 兩種實現方式 1 遞迴 2 遞推 1 遞迴的思想 就是乙個問題可以拆分成他的子問題 子問題和原問題有相同的結構 每一次縮小一次問題的規模,規模最小的時候就是遞迴函式的出口...

golang 爬樓梯演算法 遞迴 非遞迴

遞迴實現的可讀性高,實現簡單。func climbstairs n int int current 當前爬的樓梯數 n 目標樓梯數 count 計數 func climb current,n int,count int if current 1 n if current 2 n 先定義乙個棧 typ...