1.用Java解决斐波那契数列问题
1.1思路
斐波那契数列 0 1 1 2 3 5 8 13 21 34 55 89…
可知从第三项开始所知结果皆是前两项的和,
即设变量fibonacci();设参数n
用递归的放法来解决问题。
递归就是将问题拆分为若干个小问题,不断地向下递进,将计算问题变得简单,直至无法继续推进,且直接能得到结果,也叫到达出口。再由出口的结果,逐层向上回归,依次计算每一层的结果,直至回到最高层。
1.2本文先分析斐波那契数列各项的来源,再细分直至找到最简单的问题且无法再向下推进,即找到出口后,再开始逐层回归至顶层计算。减去赘余重复代码,给出口加上条件,最后得出总代码,亲测代码可用。
可知以下思路
第三项的值fibonacci3(n)=fibonacci2(n-1)+fibonacci1(n-2);
第二项的值fibonacci2(n)=fibonacci1(n-1)+fibonacci0(n-2);
且第一项的值和第0项的值无法再细分,可为已知条件。可为出口。
第一项的值fibonacci1(n)=1; 第0项的值fibonacci0(n)=0;
即可知以下参考代码:
class Test{
public static void main (String[] args){
//使用递归完成“斐波那契数列” 0 1 1 2 3 5 8 12 21 34 55.。。。
int result = fibonacci(6);
System.out.print(result);
}
//当前项n的结果,是前两项的和
//使用递归完成“斐波那契数列” 0 1 1 2 3 5 8 12 21 34 55.。。。
public static int fibonacci6(int n){//第6项
return fibonacci5(n-1)+fibonacci4(n-2);
}
public static int fibonacci5(int n){//第5项
return fibonacci4(n-1)+fibonacci3(n-2);
}
public static int fibonacci4(int n){//第4项
return fibonacci3(n-1)+fibonacci2(n-2);
}
public static int fibonacci3(int n){//第3项
return fibonacci2(n-1)+fibonacci1(n-2);
}
public static int fibonacci2(int n){//第2项
return fibonacci1(n-1)+fibonacci0(n-2);
}
public static int fibonacci1(int n){//第1项
return 1;
}
public static int fibonacci2(int n){//第0项
return 0;
}
}
细分如下图:
从上诉分析可知
从第三项开始每项都等于前两项的和,且重复的代码都为
public static int fibonacci(int n){//第n项
return fibonacci(n-1)+fibonacci(n-2);
}
即可减去赘余代码,又当n=1和当n=0时的值是已知条件,所以要加上两个条件,增加出口条件,当n=0时返回的结果0,当n=1时返回结果1。
if( n == 0){
return 0;
}else if( n == 1){
return 1;
}
2总代码
class sumer{
public static void main (String[] args){
//使用递归完成“斐波那契数列” 0 1 1 2 3 5 8 12 21 34 55.。。。
int result = fibonacci(4);
System.out.print(result);
}
public static int fibonacci(int n){
if( n == 0){
return 0;
}else if( n == 1){
return 1;
}
return fibonacci(n-1) + fibonacci(n-2);
}
}