9. 斐波那契数列

题目描述

写一个函数,输入n,求斐波那契数列(Fibonacci)数列的第n项,斐波那契数列的定义为:
这里写图片描述

解析

方法一:用递归的方法来求斐波那契数列
方法二:用循环来求斐波那契数列,用简单的方法从下往上计算,先计算根据f(0)、f(1)计算出f(2),在根据f(1)、f(2)计算出f(3)……依次计算到f(n)。时间复杂度为O(n)。

实现

//斐波那契数列递归方法
long long Fibonacci_Solution1(unsigned int n){
    if(n<=0)
        return 0;
    if(n==1)
        return 1;
    return Fibonacci_Solution1(n-1)+Fibonacci_Solution1(n-2);
}
//斐波那契数列循环方法
long long Fibonacci_Solution2(unsigned n){
    if(n<=0)
        return 0;
    if(n==1)
        return 1;

    long long FibN;
    long long one = 0;
    long long two = 1;
    for(unsigned int i=2; i<=n; i++){
        FibN = one + two;
        one = two;
        two = FibN;
    }
    return FibN;
}

青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思考:当n>2时,第一次跳的时候有两种选择,一是第一次跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即为f(n-1);另一种选择是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即为f(n-2);因此n级台阶的跳法总数为f(n-1)+f(n-2)。即为斐波那契数列。

青蛙变态跳法

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思考同上!

矩形覆盖问题

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值