程序名称:Fibonacci.java
程序内容:
package firststudy;
/**
* 计算 Fibonacci 数列的 第40个值
* 即: 1,1,2,3,5,8.....第40个值.
* 满足递推公式: F1 = 1, F2 = 1, Fn = F (n-1) + F (n-2)
* @author web
*
*/
public class Fibonacci {
public static void main(String[] args) {
int num = 40;
long startTime = System.currentTimeMillis();
for(int i=1; i<=num; i++) {
System.out.print(method(i) + "\t");
if(i % 5 == 0) {
System.out.println();
}
}
long endTime = System.currentTimeMillis();
long time = endTime - startTime;
System.out.println("递归用时:" + time + "毫秒");
startTime = System.currentTimeMillis();
for(int i=1; i<=num; i++) {
System.out.print(method1(i) + "\t");
if(i % 5 == 0) {
System.out.println();
}
}
endTime = System.currentTimeMillis();
time = endTime - startTime;
System.out.println("非递归用时:" + time + "毫秒");
startTime = System.currentTimeMillis();
System.out.println(method(num));
endTime = System.currentTimeMillis();
time = endTime - startTime;
System.out.println("递归用时:" + time + "毫秒");
startTime = System.currentTimeMillis();
System.out.println(method1(num));
endTime = System.currentTimeMillis();
time = endTime - startTime;
System.out.println("非递归用时:" + time + "毫秒");
}
/**
* 递归方式
* @param num
* @return
*/
public static long method(int num) {
if(num == 1 || num == 2) {
return 1;
}else {
return method(num-2) + method(num-1);
}
}
/**
* 非递归方式
*/
public static long method1(int num) {
if(num == 1 || num == 2) {
return 1;
}
long f1 = 1L;
long f2 = 1L;
long f = 0;
for(int i=0; i<num-2; i++) {
f = f1 + f2;
f1 = f2;
f2 = f;
}
return f;
}
}
运行结果: