递归实现汉诺塔问题

来源:互联网 发布:阿里备案域名交易 编辑:程序博客网 时间:2024/05/19 12:14

汉诺塔实现过程

递归的思想是将一个大的复杂的问题分成小的问题来解决,而要求是小的问题与大的问题有相似的解法,并且问题的规模越来越小,并且必须存在递归出口。

下面就用代码完成汉诺塔问题:

#include<iostream>using namespace std;void Move(char src,char dest){    cout<<src<<" -> "<<dest<<endl;}void Hanoi(int n,char src,char mid,char dest){    if(1 == n)        Move(src,dest);    else    {        Hanoi(n-1,src,dest,mid);        Move(src,dest);        Hanoi(n-1,mid,src,dest);    }}void FunTest3(){    cout << "please enter the number of the plates:";    int m;    cin >> m;    cout << endl << "the result is:" << endl;    Hanoi(m, 'A', 'B', 'C');}int main(){    FunTest3();    return 0;}

测试结果

总结:通过递归实现汉诺塔的例子我们可以看出,在涉及大型而复杂的问题时,递归会使程序在总体上变得简单易于理解,而涉及递归的调用过程时则会比较复杂,当n比较大时想要去了解整个调用过程则会比较麻烦。并且递归调用开销较大,所以递归的使用也要慎重,要根据场合来选择。

0 0
原创粉丝点击