递归之汉诺塔

​
​
#include<iostream>
using namespace std;
void hanoi(int paraN,char paraSource,char paraDestination,char paraTransit){
	if(paraN<=0)
	return ;
	else{
		hanoi(paraN-1,paraSource,paraTransit,paraDestination);
		printf("%c -> %c\r\n",paraSource,paraDestination);
		hanoi(paraN-1,paraTransit,paraDestination,paraSource);
	}
}
void hanoiTest() {
    printf("---- hanoiTest begins. ----\r\n");
	printf("2 plates\r\n");
	hanoi(2,'A','B','C');
	printf("3 plates\r\n");
	hanoi(3, 'A','B','C');
    printf("---- hanoiTest ends. ----\r\n");
}
int main(){
	hanoiTest();
	return 0;
} 

​

​

 

0.. .由数学知识可知需要盘子移动2^n-1次,故时间复杂度为O(2^n)

在递归的过程中所形成的递归二叉树,树的高度为空间复杂度为O(n)

根据这段代码,我学到了汉诺塔问题的解决方法。通过递归的方式,将盘子从一个柱子移动到另一个柱子,确保小盘子永远在大盘子上面。这段代码展示了如何使用递归函数来解决汉诺塔问题,以及如何正确地移动盘子以达到最终目标。通过仔细观察代码的执行过程,我更加理解了递归的原理和实际应用。在编程中,递归是一种非常有用的技术,可以简化问题的解决方案并提高代码的可读性。这段代码的执行结果也展示了汉诺塔问题的经典解法,让我对递归算法有了更深入的认识。通过编写和理解这样的代码,我对递归和问题求解能力有了更深入的了解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值