剑指offer第九题,根据数学关系,第一反应就是递归,代码如下
package com.zjy.sword2offer;
public class Fibonacci_Recursively {
public static int fibonacci_Recurve(int n){
if(n<=0)
return 0;
if(n==1)
return 1;
return fibonacci_Recurve(n-1) + fibonacci_Recurve(n-2);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
long start = System.currentTimeMillis();
int res = fibonacci_Recurve(30);
long end = System.currentTimeMillis();
System.out.println(res + "花费时间" + (end-start));
}
}
但是计算了一下时间,发现效率非常低下,因此使用了循环的方法,通过保存上一次计算的结果来实现
package com.zjy.sword2offer;
public class Fibonacci {
public static int fibonacci(int n){
int first = 0;
int second = 1;
if(n<=0)
return first;
if(n==1)
return second;
int sum = 0;
while(n>1)
{
sum = first + second;
first = second;
second = sum;
n--;
}
return sum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
long start = System.currentTimeMillis();
long res = fibonacci(40);
long end = System.currentTimeMillis();
System.out.println(res + "花费时间" + (end-start));
}
}