斐波那契数列

斐波那契数列是最典型也是相对简单的一个递归,用算法思维去解决它还是相对简单的。

要想写出算法首先要了解的是什么是斐波那契数列,斐波那契数列(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)(≥ 2,∈ 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;
		}
	}
}

测试截图为:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值