(41)Java学习笔记——IO流技术 / 递归

递归

方法定义中调用方法本身的现象

递归注意事项:

要有出口,否则就是死递归

次数不能太多,否则就内存溢出

构造方法不能递归使用

区别:

方法的嵌套调用,例子:

Math.max(Math.max(a,b),c);

递归,例子:

publi void show(){

      show();

}

递归解决问题的方法:分解法   合并法


范例:求阶乘,用代码实现求5的阶乘

package it.cast_01;
/*
 * 递归:方法定义中调用方法本身
 * 求阶乘,用代码实现求5的阶乘。
 * 一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积
 * 规律:
 *		5! = 1*2*3*4*5
 *		5!=5*4!
 *实现的方案:
 *A / 循环实现
 *B / 递归实现
 *			a : 做递归要写一个方法
 *			b : 出口条件
 *			c : 规律
 */
public class DiGuiDemo {
	public static void main(String[] args) {
		//先用循环实现
		int jc =1;
		for (int x =2;x<=5;x++){
			jc *=x;
		}
		System.out.println(jc);
		
		//递归实现
		System.out.println(jieCheng(5));
		
	}

/*
 * 做递归要写一个方法
 * 		返回值类型:int
 * 		参数列表 :int n
 * 出口条件:
 * 		if(n==1) { return 1;)
 * 规律:
 * 		if(n !=1) {return n*方法名(n-1);}
 */
	public static int jieCheng(int n){
		if(n==1){
			return 1;
		}
		else{
			return n*jieCheng(n-1);
		}
	}
}
练习01:兔子问题(斐波那契数列)

package it.cast_02;
/*
 * 递归练习01
 * 兔子问题:斐波那契数列 从第三个数开始,每一个数是前两个之和。
 * 
 * 实现的方式:
 * 1 / 数组实现
 * 2 / 递归实现
 * 
 */
public class DiGuiTest_01 {
	public static void main(String[] args) {
		//数组实现
		//定义一个数组
		int [] arr = new int[20];
		arr[0] = 1;
		arr[1] =1;
//		arr[2] = arr[0] +arr[1];
//		arr[3] = arr[1] +arr[2];
//		...
		for (int x =2; x<arr.length;x++){
			arr[x] = arr[x-2]+arr[x-1];
		}
		System.out.println(arr[arr.length-1]);	//6765
		System.out.println("-----------------------------");
		
		//调用递归方法
		System.out.println(fib(20));
		
	}
	
/*方法:
	返回值类型:int
	参数列表:int n
出口条件:
	第一个月是1,第二个月是1;
规律:
	从第三个数开始,每个数是前两个数之和
	*/
	//递归方法
	public static int fib(int n){
		if (n == 1 || n==2){
			return 1;
		}
		else{
			return fib(n-1)+fib(n-2);
		}
	
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值