剑指Offer9斐波那契数列

来源:互联网 发布:女生适合网络还是软件 编辑:程序博客网 时间:2024/06/14 16:43

题目:

写一个函数,输入n,求斐波那契数列的第n项。
f(0) = 0;
f(1) = 1;
f(n) = f(n-1)+f(n-2);

方法1:
递归实现
long long Fibonacci(unsigned int n)
{
    if(n<=0)
        return 0;
    if(n==1)
        return 1;
    return Fibonacci(n-1)+Fibonacci(n-2);
}
方法2:
循环实现,并且不用数组来记录每一个值,只要记录最后两个变量就可以
代码:
long long FibonacciFangFa2(unsigned int n)
{
    if(n <= 0)
        return 0;
    if(n==1)
        return 1;
    long long one = 1;
    long long two = 0;
    long long num = 0;
    for(int i= 2;i<=n;i++)
    {
        num = one + two;
        two = one;
        one = num;
    }
    return num;
}

相关扩展题目:
1,上台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级台阶总共有多少种跳法。
分析:
如果是n级台阶当成是f(n),当第一次跳一级台阶,那么后面的n-1级台阶就有f(n-1),如果第一次跳了2级台阶,那么后面还剩n-2级台阶就有f(n-2)。所以
f(n) = f(n-1)+f(n-2)
2.覆盖地砖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形,问:用8个2*1的小矩形无重叠地覆盖一个2*8的大矩形,总共有多少种方法?
分析:
先把2*8的覆盖方法记为f(8),用第一个1*2的小矩形去覆盖大矩形的最左边时有两个选择,竖着放,或者横着放。当竖着放的时候,右边还剩下2*7的区域,这种情况下的覆盖方法就是f(7),当用两个1*2横着放,覆盖最左边的的大矩形的时候,右边还剩下2*6的区域,这种情况下的覆盖方法就是f(6).所以:
f(n) = f(n-1) + f(n-2)

0 0
原创粉丝点击