斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……即这个数列从第3项开始,每一项都等于前两项之和。
以下是代码实现:
import java.util.Scanner;
public class Demo {
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
Thread thread = new Thread() {
public void run() {
System.out.println(fib1(n)+"-递归");
}
};
thread.start();
System.out.println(fib2(n)+"-非递归");
}
static int fib1(int n) {//递归实现方法
if(n==1||n==2)
return 1;
else
return fib1(n-1)+fib1(n-2);
}
static int fib2(int n) {//非递归实现方法
int a=1;
int b=1;
if(n==1||n==2)
return 1;
for(int i=3;i<=n;i++) {
int c = a+b;
a=b;
b=c;
}
return b;
}
}
上面分别使用了递归和循环两种方法实现数列的计算。我为递归单独开启了一个线程,经测试发现,如果使用递归,当n=50,电脑就算不出来了,原因就是在递归过程中大量重复计算, 使用递归的时候,算法的时间复杂度是以n的指数递增的,所以这个非常考验电脑性能,但是也是说明这个算法在实际应用中并不实用。使用循环方法,当n=5000,电脑都可以计算出来,所以这个推荐在实际应用使用。