面試題:
程式設計題:有n個台階,一次只能上1步或者2步,共有多少種走法?
考察的知識點:
遞迴和迴圈迭代
遞迴:
n 的值
走法算式
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)變數的值。
n 的值
走法算式
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)
}複製**
對比總結:
方法呼叫自身稱之為遞迴,利用變數的原值推出新值稱之為迭代。
遞迴: 迴圈迭代:
wenshixin.gitee.io/blog/
上台階問題
問題描述 現在小瓜想通過台階走上平台,最底層 小瓜所在的層 編號為1,最頂層編號為n。由於小瓜的腿比較短,他一次只能向上走1級或者2級台階。小瓜想知道他有多少種方法走上平台,你能幫幫他嗎?輸入 乙個整數n,其中2 n 25。輸出 一行乙個整數,表示小瓜上台階的方案數 資料範圍 對於12 的資料,2 ...
賽碼 上台階(C )
設定人現在在台階1層,每次只能上1層到兩層,到台階1層有0種走法,到台階2層有1種走法,到台階3層有2種走法,這樣我們已經知道底部子問題的解。f n f n 1 f n 2 比如說4層只能由2層 跨兩步 或3層到達 跨1步 因此4層的走法數應該是2層走法數和3層走法數的和。使用乙個陣列來儲存到某個台...
1190 上台階(遞推)
1190 上台階 遞推 時間限制 1000 ms 記憶體限制 65536 kb 提交數 20752 通過數 5913 題目描述 樓梯有n 71 n 0 階台階,上樓時可以一步上1階,也可以一步上2階,也可以一步上3階,程式設計計算共有多少種不同的走法。輸入 輸入的每一行包括一組測試資料,即為台階數n...