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