求斐波那契数列第N位的值

求斐波那契数列第N位的值

今天突然刷到了一个很经典的题,
说一下我的思路,因为斐波那契数列除了第一,第二项外其他项是前两项的和
//0 1 1 2 3 5 8
第一想法就是以前老师讲的那个迭代,但是迭代会有大量重复数据耗费性能,用起来不是很丝滑
既然第三项等于前两项之和,那我为什么不定义出来三个节点呢,
每次把第三节点的值赋给第二个,第二个的赋给第一个,这样不就能轻易的解决了吗,话不多说,上代码

package com.thread;

public class Fibonacii {

static int firstNode=0;
static int secondNode=1;
static int lastNode;
static int sum=1;
// 0 1 1 2 3 5 8
public static void main(String[] args) {
    int fibonacii1 = fibonacii1(7);
    System.out.println("fibonacii1:"+fibonacii1);

// double fibonacii2 = fibonacii2(7);
// System.out.println(“fibonacii2:”+fibonacii2);
}

public static int fibonacii1(int n){
   if(n<=1){
       sum=0;
       return firstNode;
   }
    if(n<=2){
        sum=1;
        return secondNode;
    }
    for(int i=3;i<=n;i++){
        lastNode =firstNode+secondNode;
        firstNode=secondNode;
        secondNode=lastNode;
        sum+=lastNode;
    }
    System.out.println(sum);
    return lastNode;
}

// public static double fibonacii2(int n){
// if(n<=1){
// return 0;
// }
// if(n<=2){
// return 1;
// }
// return fibonacii2(n-1)+fibonacii2(n-2);
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值