递归的概念和例题。



###16递归概念和注意事项
	* A:递归概念和注意事项
		* a: 递归概念
			* 递归,指在当前方法内调用自己的这种现象
			* 递归分为两种,直接递归和间接递归
			* 直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法
		* b: 注意事项
			* 递归一定要有出口, 必须可以让程序停下
			* 递归次数不能过多
			* 构造方法,禁止递归
		
###17递归求和计算
	* A: 递归求和计算
		* a: 题目分析
			* 1+2+3+...+(n-1)+n:求1到n的和
			* 总结规律:1到n的和等于1到(n-1)的和再加n
			* getSum(n-1)+ n
			* 递归出口:getSum(1) return 1;
		
		* b: 案例代码	
			/*
			 *  方法的递归调用
			 *    方法自己调用自己
			 *  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化
			 *  注意:
			 *     递归一定要有出口, 必须可以让程序停下
			 *     递归次数不能过多
			 *     构造方法,禁止递归
			 */
			public class DiGuiDemo {
				public static void main(String[] args) {
					int sum = getSum(3);
					System.out.println(sum);
				}

						
				/*
				 *  计算 1+2+3+100和 = 5050
				 *  计算规律:
				 *    n+(n-1)+(n-2)
				 *    100+(100-1)+(99-1)+...1
				 */
				public static int getSum(int n){
					if( n == 1)
						return 1;
					return n + getSum(n-1);
				}
				
			}
			
###18递归求阶乘
	* A: 递归求和计算
		* a: 题目分析
			* 5!=5*4*3*2*1
			*   =5*4!
			* 4!=4*3!
			* 3!=3*2!
			* 2!=2*1!
			* 1!=1
			* n!=n*(n-1)!
			* 递归出口:n*getJieCheng(n-1):  getJieCheng(1) return 1;
		* b: 案例代码
			/*
			 *  方法的递归调用
			 *    方法自己调用自己
			 *  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化
			 *  注意:
			 *     递归一定要有出口, 必须可以让程序停下
			 *     递归次数不能过多
			 *     构造方法,禁止递归
			 */
			public class DiGuiDemo {
				public static void main(String[] args) {					
					System.out.println(getJieCheng(5));
					
				}
								
				/* 
				 *  计算阶乘 5!
				 *   5*4*3*2*1
				 */
				public static int getJieCheng(int n){
					if ( n == 1)
						return 1;
					return n * getJieCheng(n-1);
				}								
			}
###19递归计算斐波那契数列
	* A: 递归计算斐波那契数列
		* a:题目分析
			* 1 1 2 3 5 8 13 21
			* 从第三项开始,后面的每一项都等于前面两项的和,第一项和第二项的值为1,作为程序的出口
		* b: 案例代码
			/*
			 *  方法的递归调用
			 *    方法自己调用自己
			 *  适合于,方法中运算的主体不变,但是运行的时候,参与运行的方法参数会变化
			 *  注意:
			 *     递归一定要有出口, 必须可以让程序停下
			 *     递归次数不能过多
			 *     构造方法,禁止递归
			 */
			public class DiGuiDemo {
				public static void main(String[] args) {					
					System.out.println(getFBNQ(12));
				}
				/*
				 *  方法递归,计算斐波那契数列
				 *  
				 */
				public static int getFBNQ(int month){
					if( month == 1)
						return 1;
					if( month == 2)
						return 1;
					return getFBNQ(month-1)+getFBNQ(month-2);
				}
			}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值