斐波那契数列11

递归和循环:
递归:是在一个函数的内部调用这个函数自身。
循环:是通过设置计算的初始值终止条件,在一个范围内重复计算。

递归缺点:

  1. 函数调用的时间、空间消耗:每一次调用,都需要在内存栈里分配空间以保存函数参数返回地址临时变量
  2. 递归中可能很多计算是重复的。
  3. 调用栈溢出:每个进程的栈的容量是有限的。若递归调用层级太多,就会超出栈的容量,导致栈溢出。

斐波那契数列
题目描述: 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。

Fibonacci定义如下:
f(n) = { 0 n=0;}
f(n) = { 1 n=1;}
f(n) = { f(n-1)+f(n-2) n>1;}

解题思路:递归效率低,使用迭代。从下往上计算,首先根据f(0)和f(1)算出f(2); 再根据f(1)和f(2)算出f(3), 依次计算, 主要是借助3个临时变量。

测试用例:

int main(){
    //求10的斐波那契数列
    int number = 10;

    std::cout << "Number's fibonacci is: " << Fibonacci(number);  //Output: 55

    return 0;
}

Fibonacci函数实现:

long long Fibonacci(unsigned int n){ //无符号n
    //临时数组,如果n为0或1时,可直接返回处理
    int result[2] = {0, 1};
    if(n < 2)
        return result[n];
    //三个临时变量
    long long fibMinusOne = 1;   //f(n-1)
    long long fibMinusTwo = 0;   //f(n-2)
    long long fibN = 0;   //f(n)
    for(auto i = 2; i <= n; ++i){
        fibN = fibMinusOne + fibMinusTwo;//初始执行n=2的情况
        fibMinusTwo = fibMinusOne; 
        fibMinusOne = fibN;
    }
    return fibN;
}

题目二:一只青蛙依次可以跳上1级台阶, 也可以跳上2级。求青蛙跳上一个n级的台阶总共有多少种跳法。

解题思路:实际上这是一个Fibonacci数列的例子, 使用公式f(n) = f(n-1) + f(n-2)便可求出跳一个n级的台阶有多少种跳法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值