数据结构-C++描述:一些常见的递归函数
来源:互联网 发布:js调用摄像头拍照上传 编辑:程序博客网 时间:2024/06/03 11:18
- 计算n!:
- int Factorial (int n)
- {
- if(n <= 1) return 1;
- else return n * Factorial(n - 1);
- }
-
- 递归计算a[0:n-1]之和:
- template<class T>
- T Rsum(T a[], int n)
- {
- if (n > 0)
- {
- return Rsum(a, n - 1) + a[n - 1];
- }
- return 0;
- }
-
- 检查n个不同元素的所有排列方式,n个元素的排列方式共有n!种:
- template<class T>
- inline void Swap(T& a, T& b)
- {
- T temp = a;
- a = b;
- b = temp;
- }
-
- template<class T>
- void Perm(T list[], int k, int m)
- {
- int i;
- if (k == m)
- {
- for (i = 0; i <= m; i++)
- {
- cout << list[i];
- }
- cout << endl;
- } else
- {
- for (i = k; i <= m; i++)
- {
- Swap(list[k], list[i]);
- Perm(list, k + 1, m);
- swap(list[k], list[i]);
- }
- }
- }
-
- 递归实现斐波那契数列:
- int foo(int n)
- {
- if (n == 0)
- {
- return 0;
- }
- if (n == 1)
- {
- return 1;
- }
- return foo(n - 1) + foo(n - 2);
- }
-
- int main() {
- for (int i = 0; i < 10; i++)
- {
- cout << foo(i) << " ";
- }
- cout << endl;
- }
-
- 非递归实现斐波那契数列,直接算出第n个斐波那契数:
- int main()
- {
- int f0 = 0;
- int f1 = 1;
- for (int i = 0; i < n - 2; i++)
- {
- f1 = f1 + f0;
- f0 = f1 - f0;
- }
- cout << f1 << endl;
- }
-
- 递归产生n个元素的所有子集:
- template<typename T>
- void enum_sub(const T data[], size_t num, vector<T> sub) {
- if (num <= 0) {
- cout<<"{";
- for (size_t i = 0; i < sub.size(); ++i)
- cout<<sub[i]<<((i == (sub.size() - 1)) ? "" : ", ");
- cout<<"}"<<endl;
- return;
- }
- enum_sub(data + 1, num - 1, sub);
- sub.push_back(data[0]);
- enum_sub(data + 1, num - 1, sub);
- }