LeetCode 509[斐波那契数]

题目

链接

LeetCode 509[斐波那契数]

详情

实例

提示

题解

思路

递归求值,但是吧,如果是用递归的话有可能会造成内存超出限制的错误,当然我不能确定会不会报此错误,因为我没有试过

此处我是用循环代替递归的

n为0时,fn为0

n为1时,fn为1

n为2时,fn为 fn_1+fn_2 = 0 + 1 = 1

n为3时,fn为 fn_1+fn_2 = 1 + 1 = 2

n为4时,fn为 fn_1+fn_2 = 1 + 2 = 3

n为5时,fn为 fn_1+fn_2 = 2 + 3 = 5

 

蓝色部分是在循环外面进行的,也就是:

当n为0时,直接返回0

当n为1时,直接返回1

 

红色部分是在循环内进行的,也就是开始递归了:

设定 i 的初始值为 2

则此时 fi_1 的值为 f1 的值,fi_2 的值为 f0 的值,此时可以求出 fi 的值

然后再将 fi_1 的值赋给 fi_2,将 fi 的值赋值 fi_1,再通过 fi = fi_1 + fi_2 来求取 fi 的值

直到 i 为 n,计算出 fn 的值后退出循环并返回 fn 

代码

class Solution {
public:
    int fib(int n) {
      
        if (0 == n)
            return 0;
        
        if (1 == n)
            return 1;
        
        int f_2 = 0, f_1 = 1;
        int iRet = 0;
        
        for (int i = 2; i < n + 1; i++)
        {
            iRet = f_1 + f_2;
            f_2 = f_1;
            f_1 = iRet;  
        }
        
        return iRet;
    }
};

类似题目

LeetCode 1137[第N个泰波那契数] 题目

类似题解

LeetCode 1137[第N个泰波那契数] 题解

posted @ 2024-12-04 17:58  EricsT  阅读(10)  评论(0编辑  收藏  举报