一.递推和回归:
引进阶乘的问题,方便讨论:
我们可以对阶乘给出如下定义:n! = 1 * 2 * 3 * ...... * n; 0! = 1;(n!表示n的阶乘)
当然,也可以以递归的方式给出定义:0!=1,n!=(n-1)!×n。
#include<iostream>
using namespace std;
int factorial(int a) {
return a == 0 ? 1 : a * factorial(a - 1);
}
int main() {
int a;
cin >> a;
a = factorial(a);
cout << a;
system("pause");
return 0;
}
递归函数本身就是根据给定规则,递推并回归的过程。题目中的递推与回归的过程如下所示:
- 递推:由未知推出已知(0! = 1):n! = n*(n-1)! -> (n-1)! = (n-1)*(n-2)! -> ... -> 0! = 1;
- 回归:利用递推的已知条件推出未知(n!):0! = 1 -> ... -> n!;
二.有关递归函数的返回值问题:
- 首先从递推开始,当递归函数递推到最后一个函数,就将它的返回值作为函数调用者(倒数第二个函数)的部分运算条件参与运算。
- 正如此题所示,当递推到a的阶乘为0,就是此题递归函数的出口;