斐波那契数列是最典型也是相对简单的一个递归,用算法思维去解决它还是相对简单的。
要想写出算法首先要了解的是什么是斐波那契数列,斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。(来源百度百科)
递归是一个相对比较难的算法,我现在也仅仅有了一些自己的想法,递归之所以很难是因为它有着复杂的过程,一层又一层的进行嵌套,我常常会因为很难想象其中的递归过程而想要放弃学习递归,但是放弃很轻松,但坚持一定很酷,学习斐波那契让我对递归有了一些自己的想法。
递归是一层又一层的嵌套过程,我的想法是先只思考跳出过程的条件,以及刚开始需要递归的循环,斐波那契数列跳出循环的条件是当 n <= 2 时,返回,如果大于 2 时,则需要前两个数相加之和,注意这里是前两个数之和,而不是前面所有的数之和,因为只需要考虑前两个数即可。而这两个数并非是一个具体的数,你只需要知道的是如何去计算它,前一个数可以用 feiBo(n-1) 代替,前第二数可以用 feiBo(n-2) 来代替,因此计算一个大于 2 的数时,只要需要返回 feiBo(n-1) + feiBo(n-2) 即可,并不用去思考其中复杂的递归过程。当然为代码的规范性,需要判断输入的数值是否合理。
递归的结束条件为:
if(n <= 2){
return 1;
}else{
return feiBo(n-1) + feiBo(n-2);
}
加上约束以及完成的构造为(用词不是太过规范):
class fei{
public int feiBo(int n){ //返回的是一个int型
if(n > 0){
if(n <= 2){
return 1;
}else{
return feiBo(n-1) + feiBo(n-2);
}
}else{
return 0;
}
}
}
main函数以及全部代码为(这里为了方便直接带入常量测试了):
public class demo17{
public static void main(String[] args) {
fei b = new fei();
int num = b.feiBo(8);
if(num != 0){
System.out.println(num);
}else{
System.out.println("输入有误!");
}
}
}
class fei{
public int feiBo(int n){
if(n>=1){
if(n<=2){
return 1;
}else{
return feiBo(n-1)+feiBo(n-2);
}
}else{
return 0;
}
}
}
测试截图为: