求斐波那契数列第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);
}
}