關於走樓梯的遞迴演算法

2021-09-30 02:27:41 字數 1511 閱讀 3090

題目:

乙個共有20個台階的樓梯,從下面走到上面。一次只能邁乙個台階或兩個台階,並且不能後退,走完這個樓梯共有多少種方法。

分析:1 步台階只有1種走法(1)

2步台階2種(11、2)

3步台階有3種(111、12、21)

4 步台階有5種(1111、112、121、211、22)

5 步台階有8種(11111、1112、1121、1211、122、2111、212、221)

6步台階有13種(111111、11112、11121、11211、1122、12111,1212、1221、2111、2112、2121、2211、222)

可以發現每乙個台階數的走法對應為比它少一步各種走法前加乙個1步和比它少兩步的走法前加乙個2步,並構成乙個fibonacci數列。

**如下:

private sub command1_click()

dim s() as string, num as long, i as long

for i = 1 to 10

upstairs i, s, num

debug.print join(s, vbcrlf)

debug.print num & " 種走法"

next

end sub

sub upstairs(byval stairnum as integer, byref steps() as string, byref methodn as long)'將stairnum台階時的所有可能走法以類似「111222 」格式儲存在陣列steps()中,走法數目儲存在methodn中

dim i as long

if stairnum = 1 then

methodn = 1

redim steps(1 to methodn)

steps(1) = 1

end if

if stairnum = 2 then

methodn = 2

redim steps(1 to methodn)

steps(1) = 11

steps(2) = 2

end if

if stairnum > 2 then

dim a() as string, b() as string, methoda as long, methodb as long

upstairs stairnum - 1, a, methoda 』遞迴呼叫

upstairs stairnum - 2, b, methodb  '遞迴呼叫

redim steps(methoda + methodb)

for i = 1 to methoda

steps(i) = 1 & a(i)

next

for i = 1 to methodb

steps(i + methoda) = 2 & b(i)

next

methodn = methoda + methodb

end if

end sub

遞迴 走樓梯

例題 爬樓梯樹老師爬樓梯,他可以每次走1級或者2級,輸入樓梯的級數,求不同的走法數例如 樓梯一共有3級,他可以每次都走一級,或者第一次走一級,第二次走兩級,也可以第一次走兩級,第二次走一級,一共3種方法。輸入 輸入包含若干行,每行包含乙個正整數n,代表樓梯級數,1 n 30輸出不同的走法數,每一行輸...

走樓梯 遞迴

描述 樓梯有n 100 n 0 階台階,上樓時可以一步上1階,也可以一步上2階,也可以一步上3階,程式設計計算共有多少種不同的走法。輸入輸入的每一行包括一組測試資料,即為台階數n。最後一行為0,表示測試結束。輸出每一行輸出對應一行輸入的結果,即為走法的數目。樣例輸入12 340樣例輸出12 47解析...

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

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