Java——斐波那契数列问题——递归

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);
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值