通过hanoi塔问题理解递归

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	(与上述推测过程的是一样的)
请按任意键继续. . .
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值