剑指Offer:斐波那契数列(两种解法:递归)

斐波那契数列

1. 问题描述
斐波那契数列指的是这样一个数列:
1,1,2,3,5,8,13,21,34,65…
这个数列从第3项开始,每一项都等于前两项之和。
An = An-1 + An-2
现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
2. 解题思路
方法1: 递推法
①:n = 0,n = 1是一个没有公式推导的值,所以,当n=0时,输出0,n = 1时,输出1
②:当n = 2时,n = n0 + n1,
③:所以,答案显而易见,需要一个中间变量,用来保存上一个斐波那契数,下一个斐波那契数 = 当前的斐波那契数+上一个斐波那契数
④:在写代码的时候注意,如果n不是unsigned 型,必须加上n>0,否则输入n = 负数,会导致错误
方法2: 递归法

3. c/c++源代码

递推法

class Solution {
public:
    int Fibonacci(int n) {
        int fibonacci_num = 1;
        int fibonacci_num_prev_1 = 0;
        int fibonacci_num_temp = 0;
        if(n <= 0 || n >39)
            return 0;
        while(--n){
            fibonacci_num_temp = fibonacci_num;
            fibonacci_num += fibonacci_num_prev_1;
            fibonacci_num_prev_1 = fibonacci_num_temp;
        }
        return fibonacci_num;
    }
};

递归法

int Fibonacci(int n) {
   if(n <= 0)
    {
        return 0;
    }else if(n == 1)
    {
        return 1;
    }else
    {
        return Fibonacci(n-1)+Fibonacci(n-2);
    }
}

4. 留言

CSDN:https://blog.csdn.net/qq_42714490
欢迎交流:

作者:有梦想的阿长

微信:hs835844948

【转载文章务必保留出处和署名,谢谢!】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值