剑指Offer面试题:10.斐波那契数列

一、题目
————————————————
写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。
图片说明
————————————————
二、思路
————————————————
  如果直接写递归函数,由于会出现很多重复计算,效率非常底,不采用。
  要避免重复计算,采用从下往上计算,可以把计算过了的保存起来,下次要计算时就不必重复计算了:先由f(0)和f(1)计算f(2),再由f(1)和f(2)计算f(3)……以此类推就行了,计算第n个时,只要保存第n-1和第n-2项就可以了。
————————————————
三、解决问题
————————————————
测试用例

  1.功能测试(3,5,8等)

  2.边界值测试(0,1,2等)

  3.性能测试(50,100等)

  4.特殊(负数)
————————————————

package swordoffer;

/**
 * @author LQ
 * @version 1.0
 * @date 2020-03-15 16:17
 */

/**
 * 问题:
 * 大家都知道斐波那契数列,现在要求输入一个整数n,
 * 请你输出斐波那契数列的第n项(从0开始,第0项为0)
 * n<=39
 */

public class Solution10 {
    public static void main(String[] args) {
        Solution10 demo = new Solution10();
        System.out.println(demo.Fibonacci(0));
        System.out.println(demo.Fibonacci(1));
        System.out.println(demo.Fibonacci(2));
        System.out.println(demo.Fibonacci(8));
        System.out.println(demo.Fibonacci(50));
        System.out.println(demo.Fibonacci(100));
        System.out.println(demo.Fibonacci(-5));
    }

    public int Fibonacci(int n) {
        if(n < 0){//当n<0,不符合约束条件
            throw new RuntimeException("下标错误,应从0开始!");
        }
        if(n == 0){
            return 0;//当n=0
        }
        if(n == 1){
            return 1;//当n=1
        }
        int prePre = 0;//F(n-1)
        int pre = 1;//F(n-2)
        int result = 1;
        for (int i = 2; i <= n; i++) {
            result = prePre + pre;//F(n)=F(n-1) + F(n-2)
            prePre = pre;//F(n-1)=F(n-2)
            pre = result;//F(n-2)=F(n)
        }
        return result;//F(n)
    }

}

————————————————
图片说明
————————————————
努力也是需要学习的,别再让你的努力,只感动了自己!愿你的每一次努力,都能为自己和别人创造价值。

Java基础 文章被收录于专栏

建立本人的Java基础技术栈积累库

全部评论

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
11-13 20:32
门头沟学院 Java
面向未来编程code:我没看到他咋急,他不就问你个问题。。。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务