递归思想

1 篇文章 0 订阅
1 篇文章 0 订阅


一个方法体内调用他自身,被称为方法递归;方法递归包含了一种隐式的循环,他会重复执行某段代码,但这种重复执行无须循环控制;

       已知有一个数列:f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值;

package object;

/**
 * Description:<br>
 * 功能:递归思想; 
 * @author CJF
 *
 */
public class Recursive {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		// 输出fn(10)的值
		System.out.println(new Recursive().fn(10));
	}

	// f(0)=1;f(1)=4;fn(n+2)=2*f(n+1)+f(n);
	public int fn(int n) {
		if (n == 0) {
			return 1;
		} else if (n == 1) {
			return 4;
		} else {
			return 2 * fn(n - 1) + fn(n - 2); // 关键点为这个式子的是如何转换而来
		}
	}

}
  

对于fn(10),等于2*fn(9)+fn(8),其中fn(9)又等于2*fn(8)+fn(7).......依次类推,最终会计算到fn(2)=2*fn(1)+fn(0),即fn(2)是可计算的,然后一路反酸回去,就可以最终得到fn(10)的值;


如果将上面数学题改成,  已知有一个数列:f(20)=1,f(21)=4,f(n+2)=2*f(n+1)+f(n),其中n是大于0的整数,求f(10)的值;

  则将fn函数改成
   

// f(20)=1;f(21)=4;fn(n+2)=2*f(n+1)+f(n);
	public int fn1(int n) {
		if (n == 0) {
			return 1;
		} else if (n == 1) {
			return 4;
		} else {
			return fn(n + 2) - 2 * fn(n + 1);
		}
	}


 数列递归:

 * 如果只知道小的数fn(0),fn(1),
 * 则将式子   fn(n+2)=2*fn(n+1)+fn(n)  转换成     fn(n)=2*fn(n-1)+2*fn(n-2)<br>
 *
 * 如果只知道大的数fn(20),fn(21),
 * 则将式子   fn(n+2)=2*fn(n+1)+fn(n)  转换成     fn(n)=fn(n+2)-2*fn(n+1)<br>
 * 
 * 就是当知道大的数,把式子fn(n)移到式子左边,其他两项在右边;
 *         当知道小的数,把式子fn(n+2)当成fn(n),其他两项依次将变量数减少2;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值