斐波那契数列的实现分为两种:1:循环;2:递归;
一)循环
1:初始化:
private int[] list;
private int n;
private long startTime;
public fibonacci_array(){
System.out.println("please enter the number you like to calculate:");
@SuppressWarnings("resource")
Scanner num=new Scanner(System.in);
n=num.nextInt();
list=new int[n];
startTime = System.currentTimeMillis();//获取开始时间;
}
2:循环的执行:
public void fibonacci() {
for(int i=0;i<n;i++)
{
if(i<2){
list[i]=1;
}
else {
list[i]=list[i-1]+list[i-2];
}
}
}
3:执行输出:
public static void main(String[] args) {
fibonacci_array newlist=new fibonacci_array();
newlist.fibonacci();
for(int i=0;i<list.length;i++)
{
if(i%5==0)
System.out.println();
System.out.print(list[i]+" ");
}
long stopTime = System.currentTimeMillis(); //获取结束时间;
System.out.println();
System.out.println("Execution time: " + (stopTime - startTime));
}
4:执行结果:
please enter the number you like to calculate:
20
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
Execution time: 1
5:时间复杂度:循环了n次,最终复杂度为O(n);
二)递归
1:初始化:
private int[] list;
private int n;
private long startTime;
public fibonacci_array(){
System.out.println("please enter the number you like to calculate:");
@SuppressWarnings("resource")
Scanner num=new Scanner(System.in);
n=num.nextInt();
list=new int[n];
startTime = System.currentTimeMillis();
}
2:设置斐波那契数列的递归式:
public int fabonacii(int i) {
if(i<2)
{
return 1;
}
else
{
return fabonacii(i-1)+fabonacii(i-2);
}
}
3:调用递归:
public static void main(String[] args) {
fibonacci_array newlist=new fibonacci_array();
for(int i=0;i<newlist.n;i++)
{
newlist.list[i]=newlist.fabonacii(i);
}
4:输出:
for(int i=0;i<newlist.list.length;i++)
{
if(i%5==0)
System.out.println();
System.out.print(newlist.list[i]+" ");
}
long stopTime = System.currentTimeMillis(); //获取系统时间;
System.out.println();
System.out.println("Execution time: " + (stopTime - newlist.startTime));
}
}
5:运行结果:
please enter the number you like to calculate:
20
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
Execution time: 1
6:时间复杂度:O(2^n) ——由二叉树而来;