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...