递归
几个 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; }