//*******************
//汉诺塔
//第一个参数 : 起始的柱子有N个盘子
//第2-4个参数, 分别是a表示起始柱子,b表示中转柱子, c表示目的地
//第2-4个参数的寓意会发生改变的例如hannuota(n-1, a, c, b);
//有n-1个盘子, 起始位置为a, 中转为c, 目的是b;
/*
以 n = 2 为例,
int a = 'a', b = 'b', c = 'c';
hannuota(2, a, b, c);
执行过程分别为 :
1, hannuota(2-1, a, c, b); -> 2, printf("%c---->%c \n", a, c);
3, hannuota(2-1, b, a, c);
// 首先要把hannuota(n-1, a, c, b)的递归执行完毕后, 才会去执行hannuota(2-1, b, a, c); 这个递归函数 .
hannuota(1, a, c, b) 由于此处的实参是: 1, a, c, b 形参则接收(隐式接收)
形参是void hannuota(int n, char a, char b, char c)
n = 1 a = a b = c c = b;
{
if (n > 0)
{
if (1 == n)
{
printf("%c---->%c \n", a, c);
}
}
//所以第一句打印的是
输出结果 :
a---->b
a---->c
b---->c
*/
void hannuota(int n, char a, char b, char c)
{
if (n > 0)
{
if (1 == n)
{
//直接把 a的东西挪到c
printf("%c---->%c \n", a, c);
}
else
{
// c作为中转, 把a的东西移到b
hannuota(n-1, a, c, b);
printf("%c---->%c \n", a, c);
// a作为中转, 把b的东西移到c
hannuota(n-1, b, a, c);
}
}
}
//***********************
//汉诺塔
//第一个参数 : 起始的柱子有N个盘子
//第2-4个参数, 分别是a表示起始柱子,b表示中转柱子, c表示目的地
//第2-4个参数的寓意会发生改变的例如hannuota(n-1, a, c, b);
//有n-1个盘子, 起始位置为a, 中转为c, 目的是b;
/*
以 n = 2 为例,
int a = 'a', b = 'b', c = 'c';
hannuota(2, a, b, c);
执行过程分别为 :
1, hannuota(2-1, a, c, b); -> 2, printf("%c---->%c \n", a, c);
3, hannuota(2-1, b, a, c);
// 首先要把hannuota(n-1, a, c, b)的递归执行完毕后, 才会去执行hannuota(2-1, b, a, c); 这个递归函数 .
hannuota(1, a, c, b) 由于此处的实参是: 1, a, c, b 形参则接收(隐式接收)
形参是void hannuota(int n, char a, char b, char c)
n = 1 a = a b = c c = b;
{
if (n > 0)
{
if (1 == n)
{
printf("%c---->%c \n", a, c);
}
}
//所以第一句打印的是
输出结果 :
a---->b
a---->c
b---->c
*/
void hannuota(int n, char a, char b, char c)
{
if (n > 0)
{
if (1 == n)
{
//直接把 a的东西挪到c
printf("%c---->%c \n", a, c);
}
else
{
// c作为中转, 把a的东西移到b
hannuota(n-1, a, c, b);
printf("%c---->%c \n", a, c);
// a作为中转, 把b的东西移到c
hannuota(n-1, b, a, c);
}
}
}
//***********************