自学C语言中,昨天在基础视频上学到了递归函数的概述和构成条件。
其中,老师有讲到一个求岁数的问题,题目如下:
第一个人比第二个人大两岁,第二个人比第三个人大两岁,第三个人比第四个人大两岁,第四个人比第五个人大两岁,第五个人十岁,求第一个人的岁数?
程序如下:
#include <stdio.h>
int getAge(int n){
int age;
if(n==1){
age=10;
} else {
age=getAge(n-1)+2;
} return age;
}
int main(int argc,const char*argv[]){
int age=getAge(5);
printf("age=%d\n",age);
return 0;
}
老师讲到,在函数的递推阶段,先后在压栈区堆积getAge(5),getAge(4),getAge(3),getAge(2),getAge(1)。
我的疑问如下:
在运算步骤中,if执行时,n=1的情况下,实际算式为10=getAge(0)+2,则此时停止压栈,并回归计算,依次出栈。那么,由于getAge(0)将直接计算得出数值8,此值是否会参与压栈? |
|