请各位帮忙看看如下题目为什么答案是8还有就是这个函数得执行过程是什么样的

关注引自免费微信小程序:皆我百晓生
要理解这个问题,我们先要分析fun函数的逻辑,然后逐步跟踪main函数中的调用过程。
函数fun接受两个参数:一个整数n和一个指向整数的指针s。其功能是计算斐波那契数列的第n项,并将结果存储在s指向的变量中。
斐波那契数列定义如下:
n项(n > 2)等于前两项之和。函数代码如下:
int fun(int n, int *s) {
int f1, f2;
if(n == 1 || n == 2)
*s = 1;
else {
fun(n-1, &f1);
fun(n-2, &f2);
*s = f1 + f2;
}
}
接下来,我们分析main函数中的调用过程:
int main() {
int x;
fun(6, &x);
printf("%d\n", x);
}
首先,调用fun(6, &x)意味着我们要计算斐波那契数列的第6项,并将结果存储在变量x中。
我们可以画出递归调用树来追踪整个过程:
fun(6)
/ \
fun(5) fun(4)
/ \ / \
fun(4) fun(3) fun(3) fun(2)
/ \ / \ / \
...
从上至下追踪:
fun(6)调用fun(5)和fun(4)fun(5)调用fun(4)和fun(3)fun(4)调用fun(3)和fun(2)fun(3)调用fun(2)和fun(1)fun(2)和fun(1)都返回1根据斐波那契数列的定义:
fun(1)和fun(2)都返回1fun(3)返回fun(2)和fun(1)的和,即1 + 1 = 2fun(4)返回fun(3)和fun(2)的和,即2 + 1 = 3fun(5)返回fun(4)和fun(3)的和,即3 + 2 = 5fun(6)返回fun(5)和fun(4)的和,即5 + 3 = 8因此,fun(6)的返回值为8,所以x的值也是8,程序输出的结果为8。