剑指offer之个人刷题历程记录

斐波那契数列

题目描述:
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从1开始,第0项为1)。
n<=39
解题思路:
斐波那契数列:1,1,2,3,5,8,13…从1,1开始,下一个数字是前两个数字之和。
注意点:
1.注意题目上说n<=39,所以需要判断n的大小。
2.使用递归的时候,虽然写出来能跑,但是发现运行时间真长,足足1234ms,重复计算就是浪费时间,而且看到讨论区里说的一直递归容易使得栈溢出。仔细想了一下确实是这样。
3.使用不是递归的,直接算出来存在数组里反而快,仅用17ms而且占用内存也下降了。

具体代码:
1.递归:

public class Solution {
    public int Fibonacci(int n) {
        if(n>39){
            return 0;
        }
        if(n<=1){
           return n;
       }
        return Fibonacci(n-1)+Fibonacci(n-2);
    }
}

2.不是递归:

public class Solution {
    public int Fibonacci(int n) {
        if(n<=1){
           return n;
       }
        int[] array=new int[n];
        int i;
        array[0]=1;
        array[1]=1;
        for(i=2;i<n;i++)
        {
            array[i]=array[i-1]+array[i-2];
        }
        return array[n-1];
    }
}

总结:
java新建一个数组:(参考的博客链接)
https://www.cnblogs.com/CAOXIAOYANG/p/6003436.html

猜你喜欢

转载自blog.csdn.net/qq_33430288/article/details/84137113