对于递归的理解的例子

package 数据结构_对于递归的理解;

import java.util.logging.Handler;

public class Dish {

public static void main(String[] args) {
	// TODO Auto-generated method stub
	int n=3;
	System.out.printf("递归算法:%d个盘片的移动过程\n",n);
	Hanoil(n,'X','Y','Z');
	
	

}

/*static void Hanoil(int n, char a,char b,char c)
{
	if(n==1)
	{
		System.out.println("\t将第"+n+"个盘子"+"从"+a+"移动到"+c);
		//System.out.printf("将第%d,个盘子从%c移动",n,a,c);
	}
	else {
		Hanoil(n-1,a,c,b);//这种情况只打印一种结果,虽然是回溯了,但是只有一种结果因为,只有一个输出语句,只有在if语句中
		//n==1有一个输出语句所以只打印出一种结果,而若是有返回的值对于这个函数来说是n==3的情况
		//
		
		
		
		
		//整个程序执行的过程:先是传来参数3后来又执行if语句条件不通过所以执行else语句,else语句通过但是有调用了本身,所以就
		//在else这个语句中又重新执行了if又不通过,所以,有执行了else,在else中又调用if这时n==1通过if语句,所以就开始回溯
		//从n==1回溯到n==2折这个位置结束,而else语句中其实返回的是n==2的语句但是,这其中用到了n==1所以if语句执行了一次,
		//最终都是在else语句中完成的
		//System.out.println("\t将第"+n+"个盘子"+"从"+a+"移动到"+c);
		//Hanoil(n-1, b, a, c);
		
	}
}*/

static void Hanoil(int n, char a,char b,char c)
{
	if(n==1)
	{
		System.out.println("\t将第"+n+"个盘子"+"从"+a+"移动到"+c);
		//System.out.printf("将第%d,个盘子从%c移动",n,a,c);//这样为什么报错?把输出语句写成printf就对了
	}
	else {
		Hanoil(n-1,a,c,b);//这种情况只打印一种结果,虽然是回溯了,但是只有一种结果因为,只有一个输出语句,只有在if语句中
		//n==1有一个输出语句所以只打印出一种结果,而若是有返回的值对于这个函数来说是n==3的情况
		System.out.println("\t将第"+n+"个盘子"+"从"+a+"移动到"+c);
		
		//这种情况会有输出三种结果,一是在刚开始自己调用自己到n==1时打印第一个结果,接着回溯,回溯到n==2时也会有打印,因为知道n==1
		//的情况,所以二照着它来,有打印,而最后一组打印是因为当函数执行hanoil()函数执行完,就会到打印语句了,所以有三个打印结果,如果
		//程序最终输出的结果是n==3的结果,如果有返回结果的话,因为是在n==3的情况下调用他自己本身,然后又使n-1,验证的话就是
		//猴子吃桃的那个问题,最终结果返回时就是桃子第一天的数量
		
	}
}

}
此代码是在李春葆老师的递归的代码的理解,下面的加上注释的都是运行时出现的情况的一种解释,其实也是和上一篇差不多,对于递归的理解,可以自己运行看看结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值