用上台階來學習遞迴和迭代思想

2022-09-07 07:48:10 字數 1728 閱讀 1456

面試題:

程式設計題:有n個台階,一次只能上1步或者2步,共有多少種走法?

考察的知識點:

遞迴和迴圈迭代

遞迴:走法算式1

只能一次1步

f(1) = 1

2(1)一次走1步

(2)直接走2步

f(2) = 2

3(1)先到達f(1)的情況,再從f(1)直接跨2步

(2)先到達f(2)的情況,再從f(2)直接跨1步

f(3) = f(2) + f(1) = 3

4(1)先到達f(2)的情況,再從f(2)直接跨2步

(2)先到達f(3)的情況,再從f(3)直接跨1步

f(4) = f(3) + f(2) = 5……

…n = x

(1)先到達f(n-2)的情況,再從f(n-2)直接跨2步

(2)先到達f(n-1)的情況,再從f(n-1)直接跨1步

f(x) = f(x - 2) + f( - 1)

遞迴方式的示例**:

public class diguitest 

if (n == 1 || n == 2)

return digui(n - 1) + digui(n - 2);

}public static void main(string args)

}

迴圈迭代:

one儲存最後走1步,two儲存最後走2步。迴圈迭代就是不斷修改這兩個(one,two)變數的值。

走法算式

1只能一次1步

f(1) = 1

2(1)一次走1步

(2)直接走2步

f(2) = 2

3(1)先到達f(1)的情況,再從f(1)直接跨2步

(2)先到達f(2)的情況,再從f(2)直接跨1步

f(3) = two + one

f(3) = f(1) + f(2)

two = f(2); one = f(1)

4(1)先到達f(2)的情況,再從f(2)直接跨2步

(2)先到達f(3)的情況,再從f(3)直接跨1步

f(4) = two + one

f(4) = f(2) + f(3)

two = f(2); one = f(3)……

…n = x

(1)先到達f(n-2)的情況,再從f(n-2)直接跨2步

(2)先到達f(n-1)的情況,再從f(n-1)直接跨1步

f(x) = two + one

f(x) = f(x - 2) + f(x - 1)

two = f(x - 2); one = f(x - 1)

迴圈迭代方式的示例**:

public class xunhundiedaitest 

if (n == 1 || n == 2)

int one = 1; // 初始化為走到第一級台階的走法

int two = 2; // 初始化為走到第二級台階的走法

int sum = 0;

for (int i = 3; i <= n; i++)

return sum;

}public static void main(string args)

}

對比總結:

方法呼叫自身稱之為遞迴,利用變數的原值推出新值稱之為迭代。

遞迴:迴圈迭代:

.

遞迴 上台階走法

遞迴需要滿足的三個條件剛剛這個例子是非常典型的遞迴,那究竟什麼樣的問題可以用遞迴來解決呢?我總結了三個條件,只要同時滿足以下三個條件,就可以用遞迴來解決。乙個問題的解可以分解為幾個子問題的解何為子問題?子問題就是資料規模更小的問題。比如,前面講的電影院的例子,你要知道,自己在哪一排 的問題,可以分解...

上台階問題(遞迴,DFS)

題目 一共39層台階。如果我每一步邁上1個台階或者兩個台階,先邁左腳,再邁右腳,然後左右交換,最後一步邁右腳,也就是一共要走偶數步,那麼,上完39級台階,有多少種不同的方法?思路採用遞迴的思想,邊界條件就是台階上數小於0,返回0 台階上等於0,而且步數恰好是偶數步,那麼說明走完了所有台階,方法加1....

上台階問題

問題描述 現在小瓜想通過台階走上平台,最底層 小瓜所在的層 編號為1,最頂層編號為n。由於小瓜的腿比較短,他一次只能向上走1級或者2級台階。小瓜想知道他有多少種方法走上平台,你能幫幫他嗎?輸入 乙個整數n,其中2 n 25。輸出 一行乙個整數,表示小瓜上台階的方案數 資料範圍 對於12 的資料,2 ...