下面情况下使用递归:
1、数学定义本身是递归的
如计算阶乘,最大公约数和Fibonacci数列
2、数据结构是递归的
如队列,链表,树和图
3、问题的解法是递归的
如Hanoi塔,骑士游历,八皇后问题(回溯法)
本质上,将原来的问题,转化为更小的同一问题
例:数组求和
Sum(arr[0...n-1])=arr[0]+Sum(arr[1...n-1]) 更小的同一问题
Sum(arr[1...n-1])=arr[1]+Sum(arr[2...n-1]) 更小的同一问题
Sum(arr[n-1...n-1])=arr[n-1]+Sum([]) 最基本的问题
#include<iostream>
#include<vector>
using namespace std;
int Sum1(int m, int n) {
if (m > n)
return 0;
else
return m+Sum1(m + 1, n);
}
int Sum(int n) {
return Sum1(0, n);
}
int main() {
cout << Sum(4) << endl;
return 0;
}
long Fact(int n) {
if (n < 0)
return -1;
else if (n == 0 || n == 1)
return 1;
else
return n * Fact(n - 1);
}