乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級台階總共有多少種跳法?對於這種題,我們要先從數學的角度出發
若台階只有一級,則只有一種跳法,
若台階只有兩級,則只有兩種跳法,
當台階有**的時候,又分情況了,設n級的時候有f(n)種跳法,第一跳為1級,則還剩f(3-1)種跳法,第一跳為2級的時候,則還剩f(3-2)種跳法,
同理,第一跳為1級時,還剩f(n-1)種跳法,第一跳為2級時,還剩f(n-2)種跳法
所以得出結論,f(n) = f(n-1) + f(n-2), n>=3
這是乙個斐波那契數列!則有如下解法
/**
* 乙隻青蛙一次可以跳上一級台階,也可以跳上2級。求該青蛙跳上乙個n級台階總共有多少種跳法
* */
#includeusing namespace std;
long fib(int n);
long fib1(int n);
long fib2(int n);
long tail(int n, int num1, int num2, int begin);
int main()
// 普通遞迴版本
long fib(int n)
else
if (n == 2)
else
if (n >= 3)
else
}// 迭代版本
long fib1(int n)
else
if (n >= 3)
return sum;
}}// 尾遞迴版本
long fib2(int n)
else
}long tail(int n, int num1, int num2, int begin)
else
}
乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法?同上,我們用數學的角度來看待這問題,
首先,一級台階的時候只有一種跳法,
二級台階的時候只有兩種跳法,
當**台階的時候,f(3) = f(3-1) + f(3-2) + f(3-3)
當四級台階的時候,f(4) = f(4-1) + f(4-2) + f(4-3) + f(4-4)
當n級台階的時候,f(n) = f(n-1) + f(n-2) + f(n-3) + …… + f(1) + f(n-n)
當n-1級台階的時候,f(n-1) = f(n-2) + f(n-3) + …… + f(1)
所以,f(n) = f(n-1) + f(n-1) + f(0), f(0) = 0
則f(n) = 2f(n-1)
/**
* 乙隻青蛙一次可以跳上1級台階,也可以跳上2級......它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法
* */
#includelong jump(int n);
int main()
long jump(int n)
else
if (n >= 3)
return -1;
}
劍指offer 青蛙跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 這是一道比較簡單的動態規劃問題。n 1時,青蛙只能跳一次,即num 1 n 2時,青蛙可以有兩種方法,1 1,2 即num 2 n 3時,青蛙可以有三種方法,1 1 1,1 2,2 1...
劍指offer 青蛙跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 public class solution if target 1 if target 2 return jumpfloor target 1 jumpfloor target 2 乙...
劍指offer 青蛙跳台階I 青蛙跳台階 II
i 題目 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法 先後次序不同算不同的結果 斐波那契數列變體,關鍵是找出遞推公式。假設跳n級台階有f n 中跳法,容易發現f 1 1,f 2 2 n 2時,如果最後一次跳一級台階,一共有f n 1 種跳法,如果最後一次...