hanoi塔问题的递归实现的代码
#include <stdio.h>
#include <stdlib.h>
void hanoi(int n, char A, char B, char C)
{
//printf("n = %d\n", n);
if(n == 1)
printf("%c -> %c\n", A, C);
else
{
hanoi(n - 1, A, C, B);
printf("%c -> %c\n", A, C);
hanoi(n - 1, B, A, C);
}
}
int main()
{
hanoi(3, 'A', 'B', 'C');
system("pause");
return 0;
}
运行结果
现在个源代码加入注释
#include <stdio.h>
#include <stdlib.h>
void hanoi(int n, char A, char B, char C) //hanoi塔问题, 每结束一个hanoi()函数,
{ //都会把A上的n个盘子全部移到C上 ********** 这是函数的功能!!!!!
printf("n = %d\n", n);
if(n == 1) //把A上一个盘子移到C上 ************** 2
printf("%c -> %c\n", A, C);
else
{
hanoi(n - 1, A, C, B); //把A上n - 1个盘子移到B上 ********* 1
printf("%c -> %c\n", A, C);
hanoi(n - 1, B, A, C); //再把B上n - 1个盘子移到c上 ********* 3
}
}
//****************** 注意函数有两个printf(), 但只会执行一个 输出的都是函数的 A -> C (注意参数类型)
int main()
{
hanoi(3, 'A', 'B', 'C');
system("pause");
return 0;
}
/*
递归函数实现过程
hanio(3, A, B, C) ------------------------------------- n == 3
hanio(2, A, C, B) --------------------------------- n == 2
hanio(1, A, C, B) ----------------------------- n == 1
printf();
printf();
hanio(1, B, A, C) ----------------------------- n == 1
printf();
printf();
hanio(2, B, A, C) --------------------------------- n == 2
hanio(1, A, C ,B) ----------------------------- n == 1
printf();
printf();
hanio(1, B, A, C) ----------------------------- n == 1
printf();
函数结束
验证: 注意n值的变化:3 2 1 1 2 1 1
在函数执行判断是输出n的值
output:
n = 3
n = 2
n = 1
A -> C
A -> B
n = 1
C -> B
A -> C
n = 2
n = 1
B -> A
B -> C
n = 1
A -> C
n 的顺序为 3 2 1 1 2 1 1 (与上述推测过程的是一样的)
请按任意键继续. . .
*/