剑指offer 07斐波那契数列
现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39
java版本:
public class Solution { public static void main(String[] args) { long startTime=System.currentTimeMillis(); System.out.println("第39项是:"+Fibonacci(39)); long endTime = System.currentTimeMillis(); System.out.println("程序运行的时间 :"+(endTime-startTime)+"ms"); // TODO Auto-generated method stub } /*采用循环,存取中间项。速度快*/ /*public static int Fibonacci(int n) { int a=1,b=1,c=0; if(n<0){ return 0; }else if(n==1||n==2){ return 1; }else{ for(int i=3;i<=n;i++){ c=a+b; b=a; a=c; } return c; } }*/ /*递归,简单,但是速度慢,数字越大,运行时间越长*/ public static int Fibonacci(int n){ if(n==0) return 0; if(n==1) return 1; return Fibonacci(n-1)+Fibonacci(n-2); } }
js版本:
function Fibonacci(n) { if(n==0){ return 0; } if(n==1||n==2){ return 1; } var a=1,b=1,c=0; for(var i=3;i<=n;i++){ c=a+b; b=a; a=c; } return c;// write code here }
总结:核心思想就是c=a+b;b=a;a=c;这三项。每一次先确定c的值,然后把上一次a的值赋值给b,再把本次的c的值赋值给a,每一次for循环向后走一次。