C语言递归问题
这段代码我有两个问题1.程序功能:实现如下算式:S = 5 + (s = 4 + (s = 3 + (s = 2 + (s = 2))))--------是否正确?
2.int main()里面不是一直调用 fun 函数吗,不是应该最后一次调用fun函数时才进入printf 语句吗 为什么终端会输出 5 个数, 我认为应该就输出最后 16 这个数呀
请各位大佬指点指点
//Think Different !!!
/*
//程序功能:实现如下算式:S = 5 + (s = 4 + (s = 3 + (s = 2 + (s = 2))))
*/
#include <stdio.h>
int fun(int n)
{
int s;
if(n < 2)
s = 2;
else
s = n + fun(n - 1);
printf("%d\t", s);
return s;
}
int main()
{
int k;
k = fun(5);
printf("\nk = %d", k);
return 0;
}
为什么终端会输出 5 个数>>>
递归递归,递完之后就有归。你的fun函数只有一个递归出口,所以每次调用都会打印一次。
if else里面可以直接返回出去了,当然,去掉fun里面的打印s的调用,也可以去掉5次打印 Stubborn 发表于 2021-5-7 20:02
为什么终端会输出 5 个数>>>
递归递归,递完之后就有归。你的fun函数只有一个递归出口,所以每次调用都会 ...
大佬能解释下他这5个输出为什么是
2 4 711 16
这么个顺序吗? 本帖最后由 Stubborn 于 2021-5-7 21:57 编辑
害羞的新手 发表于 2021-5-7 21:20
大佬能解释下他这5个输出为什么是
2 4 711 16
这么个顺序吗?
递归递归啊,何时归何时打印,你想函数一层一层的调用,f(5) ->调用f(4)->f(3)->f(2)->f(2)
到f1之后,是怎么运行程序的?f(1)结果返回给谁,返回之后,f(2)又是怎么运行的?结果是怎么一层一层往上“冒泡”的?
你要知道,函数调用就得出结果,出结果前就只能等结果。等下面函数传回来的过程叫归。 Stubborn 发表于 2021-5-7 21:55
递归递归啊,何时归何时打印,你想函数一层一层的调用,f(5) ->调用f(4)->f(3)->f(2)->f(2)
到f1之后 ...
我明白了,就是像洋葱一样,不过是先输出葱芯,再一层一层向外输出是吧。
页:
[1]