用如下程序来解释递归:
#include <stdio.h>
int Sum(int n) //从1~n相加
{
return n == 1 ? 1:Sum(n-1)+n;
}
int main()
{
printf("%d\n",Sum(4));
return 0;
}
程序从main开始执行,当执行Sum(4)时的情况如下图所示:
Sum(4)执行到最底下层虚线处,即returnSum(n-1)+n,并在栈中开辟一个栈帧存放结果,然后运行Sum(3)。
后续情况如下图所示:
当Sum(1)运行完后,return 1 给Sum(2),并消掉栈中的最上层栈帧,后续如下图所示:
Sum(4) ,return 10,程序运行结束。