今天研究了下斐波那契数列的调用深度,自己写了个代码测试了下斐波拉契的0-10项
package ChangeSort;
public class Fi {
static int m=0;
public static void main(String[] args){
for(int i=0;i<=10;i++){
System.out.println("fun("+i+")=: "+fun(i));
System.out.println("m=: "+m);
m=0;
}
}
static int fun(int i){
if(i==0) {
m++;
return 0;
}
if(i==1) {
m++;
return 1;
}
else {
m++;
return fun(i-1)+fun(i-2);
}
}
}
package ChangeSort;
public class Fi {
static int m=0;
public static void main(String[] args){
for(int i=0;i<=10;i++){
System.out.println("fun("+i+")=: "+fun(i));
System.out.println("m=: "+m);
m=0;
}
}
static int fun(int i){
if(i==0) {
m++;
return 0;
}
if(i==1) {
m++;
return 1;
}
else {
m++;
return fun(i-1)+fun(i-2);
}
}
}
测试结果如下:
fun(0)=: 0
m=: 1
fun(1)=: 1
m=: 1
fun(2)=: 1
m=: 3
fun(3)=: 2
m=: 5
fun(4)=: 3
m=: 9
fun(5)=: 5
m=: 15
fun(6)=: 8
m=: 25
fun(7)=: 13
m=: 41
fun(8)=: 21
m=: 67
fun(9)=: 34
m=: 109
fun(10)=: 55
m=: 177
首先斐波拉契的深度是两个子函数的深度和+1,即f(2)=f(0)+f(1)+1=1+1+1=3; f(n)=f(n-1)+f(n-2)+1接下来准备研究下斐波拉契数列函数写的优化方案。
fun(0)=: 0
m=: 1
fun(1)=: 1
m=: 1
fun(2)=: 1
m=: 3
fun(3)=: 2
m=: 5
fun(4)=: 3
m=: 9
fun(5)=: 5
m=: 15
fun(6)=: 8
m=: 25
fun(7)=: 13
m=: 41
fun(8)=: 21
m=: 67
fun(9)=: 34
m=: 109
fun(10)=: 55
m=: 177