标签:sp for on 问题 bs 代码 时间 算法 nbsp
问题描述:
一只青蛙一次可以跳上一个台阶或者两个。求该青蛙跳上一个N级台阶有多少种方法。
思路解析:
如果只跳一级台阶青蛙只有一种跳法,两级就有两种。我们把n级台阶的跳法看成n的函数
记为f(n)。当n大于二时,第一次跳时有两种不同的选择:一是一次只跳一级,此时跳法数
目等于后面n-1级台阶的跳法数目,即为f(n-1);另外一种就是选择第一次跳2级,此时跳法
数目就等于后面剩下的n-2级台阶的跳法数目即为f(n-2)。总数即为f(n)=f(n-1)+f(n-2);这是
一个典型的斐波那契数列。尽量不要写递归的算法,浪费时间和空间。
参考代码:
long long Fibonacci(unsigned n)
{
if (n < 2)
{
if (n == 1)
{
return 1;
}
else
{
return 0;
}
}
else
{
long long fib1 = 1;//f(n-1)
long long fib2 = 0;//f(n-2)
long long fibN = 0;//f(n)
for(unsigned int i = 2; i <= n;i++)
{
fibN = fib1+fib2;
fib2 = fib1;
fib1 = fibN;
}
return fibN;
}
}
思考:
以前也写过斐波那契数列,虽然不难,不过应用还是很多的,换了问题形式就不容易分析出来,知识得灵活运用。
标签:sp for on 问题 bs 代码 时间 算法 nbsp
原文地址:http://www.cnblogs.com/Mr-Zhong/p/4137021.html