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,验证的话就是
//猴子吃桃的那个问题,最终结果返回时就是桃子第一天的数量
}
}
}
此代码是在李春葆老师的递归的代码的理解,下面的加上注释的都是运行时出现的情况的一种解释,其实也是和上一篇差不多,对于递归的理解,可以自己运行看看结果