函数执行过程:
1 在主程序中计算每个实际参数值;
2 用实际参数值初始化形式参数;
3 依次执行函数体的每个语句,直到遇见return语句或函数体结束;
4 计算return后面的表达式的值,用表达式的值构造一个临时变量;
5 回到调用函数,用临时变量置换函数调用,继续主程序的执行;
递归函数构成自我调用,直到递归出口条件:
#include<iostream>
using namespace std;
int i=0;//记录递推顺序;
int j=0;//记录回归调用顺序;
long fac(int n)
{
long sum=0;
++i;
cout<<"递推:"<<i<<endl;
if (n == 0)
return 1;
else
sum = n * fac(n-1);
++j;
//返回的临时值代替函数调用
cout<<"回归:"<<j<<endl;
return sum;
}
int main()
{
cout<<fac(3)<<endl;
system("pause");
}
/*
递推:1
递推:2
递推:3
递推:4
回归:1
回归:2
回归:3
6
*/
递推了4次(自调用前的代码执行了4次),回归3次(基线条件回归,自调用后的代码执行了3次)。
函数调用fac(3),相当于此代码重复了4次:

从以上递推、回归过程可见,递推、回归过程执行函数的代码段是不一样的,递推过程执行自调用函数之前的代码,达到基线回归条件后的第一次回归,直接return一个常量或常量表达式的值(不会再执行return后面的代码),此后的回归过程调用自调用函数之后的代码。
-End-