递归

 几个 Simple 的递归例子

 1 #include <iostream>
 2 using namespace std;
 3 
 4 // 递归求 n!
 5 int fact(int n)
 6 {
 7     if (n <= 1)
 8         return 1;
 9     else
10         return n * fact(n-1);
11 };
12 
13 // 递归求 x^n (x的n次方)
14 int power(int x, int n)
15 {
16     if (0 == n)
17         return 1;
18     else
19         return x * power(x, n-1);
20 }
21 
22 int main()
23 {
24     int i,j;
25     i = fact(5);
26     j = power(2, 5);
27     cout << i << endl;
28     cout << j << endl;
29     
30     return 0;
31 }

 

 

 

// hanoi  问题。。。。对于递归调用,要学会举一反三。。。

#include <iostream>      
using namespace std;
int k=1;                  // 定义了一个全局变量。是为了使输出界面更清晰。

// 定义在主函数外面的 move 函数。
void move(char x,char y)  
{
    // 实现移动盘子的操作。
    cout<<""<<k<<"步:      "<<x<<"--->"<<y<<endl;  

    // 格式控制,让输出界面更友好。
    k++;              
}

//  -----------关键函数--------用递归的方式定义的。要理解。。
void hanoi(int n, char one ,char two ,char three)   
{
    // 要注意这里参数的传递。。。深刻理解实参、形参 的传递。以及每个参数的生命周期。。
    if(n==1) move(one ,three);                 //  开始递归定义了。。。。。。
    else
    {
        hanoi(n-1,one ,three,two);         //  掌握递归的用法。。
        move(one ,three);                  // 递归这东西讲不清楚,需要自己花时间慢慢体会。。。
        hanoi(n-1,two,one,three);          // ......递归的............ 
    }
}

int main()
{
    int n;
    cout<<"             汉诺塔问题      "<<endl<<endl;
    cout<<"  请输入盘子的个数 :";
    cin>>n;
    cout<<endl;
    cout<<"     "<<n<<" 个盘子的移动顺序为:"<<endl<<endl;
    hanoi(n,'A','B','C');                // ---------直接调用写好的递归函数。。
    return 0;
}

 

posted @ 2013-04-23 23:49  He_LiangLiang  阅读(258)  评论(0编辑  收藏  举报