汉诺塔 C语言

总代码

#include <stdio.h>
/**
 * Hanoi.
 */
void hanoi(int paraN, char paraSource, char paraDestination, char paraTransit) {
	if (paraN <= 0) {
		return;
	} else {
		hanoi(paraN-1, paraSource, paraTransit, paraDestination);//将 n - 1个盘从S 通过D 移动到 T 
		printf("%c->%c\n", paraSource, paraDestination);//将 最下面一个盘 移动到D 
		hanoi(paraN-1, paraTransit, paraDestination, paraSource);//将在T 上的n-1个盘,通过S移动到D上,目的完成。 
	}//Of if
}//Of hanoi 
 
 
/**
 * Test the hanoi function.
 */
void hanoiTest() {
	printf("---- hanoiTest begins. ----\n");
	printf("3 plates\n");
	hanoi(3, 'A', 'B', 'C');//将三个盘子从A柱子上移动到B(其中借助了C);
	printf("5 plates\n");
	hanoi(5, 'A', 'B', 'C'); 
	printf("---- hanoiTest ends. ----\n");
}  
int main(void) {
	hanoiTest(); 
	return 0;
}

汉诺塔问题就是典型的递归,在离散数学也学了,最终得出规律就是f(n)=2*f(n-1)+1。

知道了具体过程总结规律就很简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值