斐波那契数列

斐波那契数列

题目链接

牛客网

题目描述

描述

大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。

数据范围:1≤n≤39

要求:空间复杂度 O(1),时间复杂度 O(n) ,本题也有时间复杂度 O(logn) 的解法

输入描述:

一个正整数n

返回值描述:

输出一个正整数

实例1

输入: 2

返回值:1

实例2

输入: 4

返回值: 3

解法(2种)

第一种:递归方式 O(2n)

public static int fibonacci(int n) {
        if(n <= 2){
            return 1;
        }
        return fibonacci(n-1) + fibonacci(n-2);
    }

第二种:优化存储的方式 O(n)

分析:

其实我们可以发现每次就用到了最近的两个数,所以我们可以只存储最近的两个数

sum存储第 n 个的值 one存储第 n-1 个的值 two存储第 n-2 个的值

public static int fibonacci2(int n) {
        if(n == 0){
            return 0;
        }else if(n == 1){
            return 1;
        }
        int sum = 0;
        int two = 0;
        int one = 1;
        for(int i=2;i<=n;i++){
            //把第n-1个值和第n-2个值的和相加就等于第n个的值
            sum = two + one;
            //把第n-1个的值赋值给第n-2个的
            two = one;
            //把第n个的值赋值给第n-1
            one = sum;
        }
        return sum;
    }
posted @   China熊孩子  阅读(185)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示