题目概述
写一个函数,求斐波那契数列的第N项
递归实现
long long Fib(size_t n)
{
if (n <= 2)
return n - 1;
return Fib(n - 1) + Fib(n - 2);
}
非递归实现
long long FibNonR(size_t n)
{
if (n <= 2)
return n - 1;
long long f1 = 0;
long long f2 = 1;
long long f = 0;
for (size_t i = 2; i < n; ++i)
{
f = f1 + f2;
f1 = f2;
f2 = f;
}
return f;
}
题目扩展
青蛙跳台阶问题
一个青蛙一次可以跳上一个台阶,也可以跳上两个台阶。求该青蛙跳上N个台阶有多少种跳法
解析
(1)当只有1个台阶时,显然只有一种跳的方法
(2)如果有两个台阶,那么就有两种跳法了
(3)如果台阶多了,那么第一次跳的时候会有两种不同的选择:跳一个台阶还是跳两个
如果跳一级,那么剩下的台阶跳法就是f(n-1);
如果跳两级,那么剩下的台阶跳法就是f(n-2);
这样分析后,我们就知道这是斐波那契数列了
思维扩展
如果青蛙一次在跳N级台阶时,可以跳1级,2级...N级
那么跳上N级台阶有多少种跳法?
这里用数学归纳法可以证明f(n) = 2^(n-1)