数据结构-C++描述:一些常见的递归函数

来源:互联网 发布:js调用摄像头拍照上传 编辑:程序博客网 时间:2024/06/03 11:18
Code:
  1. 计算n!:  
  2. int Factorial (int n)  
  3. {  
  4.     if(n <= 1) return 1;  
  5.     else return n * Factorial(n - 1);  
  6. }  
  7.   
  8. 递归计算a[0:n-1]之和:  
  9. template<class T>  
  10. T Rsum(T a[], int n)  
  11. {  
  12.     if (n > 0)  
  13.     {  
  14.         return Rsum(a, n - 1) + a[n - 1];  
  15.     }  
  16.     return 0;  
  17. }  
  18.   
  19. 检查n个不同元素的所有排列方式,n个元素的排列方式共有n!种:  
  20. template<class T>  
  21. inline void Swap(T& a, T& b)  
  22. {  
  23.     T temp = a;  
  24.     a = b;  
  25.     b = temp;  
  26. }  
  27.   
  28. template<class T>  
  29. void Perm(T list[], int k, int m)  
  30. {  
  31.     int i;  
  32.     if (k == m)  
  33.     {  
  34.         for (i = 0; i <= m; i++)  
  35.         {  
  36.             cout << list[i];  
  37.         }  
  38.         cout << endl;  
  39.     } else  
  40.     {  
  41.         for (i = k; i <= m; i++)  
  42.         {  
  43.             Swap(list[k], list[i]);  
  44.             Perm(list, k + 1, m);  
  45.             swap(list[k], list[i]);  
  46.         }  
  47.     }  
  48. }  
  49.   
  50. 递归实现斐波那契数列:  
  51. int foo(int n)  
  52. {  
  53.     if (n == 0)  
  54.     {  
  55.         return 0;  
  56.     }  
  57.     if (n == 1)  
  58.     {  
  59.         return 1;  
  60.     }  
  61.     return foo(n - 1) + foo(n - 2);  
  62. }  
  63.   
  64. int main() {  
  65.     for (int i = 0; i < 10; i++)  
  66.     {  
  67.         cout << foo(i) << " ";  
  68.     }  
  69.     cout << endl;  
  70. }  
  71.   
  72. 非递归实现斐波那契数列,直接算出第n个斐波那契数:  
  73. int main()  
  74. {  
  75.     int f0 = 0;  
  76.     int f1 = 1;  
  77.     for (int i = 0; i < n - 2; i++)  
  78.     {  
  79.         f1 = f1 + f0;  
  80.         f0 = f1 - f0;  
  81.     }  
  82.     cout << f1 << endl;  
  83. }  
  84.   
  85. 递归产生n个元素的所有子集:  
  86. template<typename T>  
  87. void enum_sub(const T data[], size_t num, vector<T> sub) {  
  88.     if (num <= 0) {  
  89.         cout<<"{";  
  90.         for (size_t i = 0; i < sub.size(); ++i)  
  91.             cout<<sub[i]<<((i == (sub.size() - 1)) ? "" : ", ");  
  92.         cout<<"}"<<endl;  
  93.         return;  
  94.     }  
  95.     enum_sub(data + 1, num - 1, sub);  
  96.     sub.push_back(data[0]);  
  97.     enum_sub(data + 1, num - 1, sub);  
  98. }  
原创粉丝点击