阿九。 发表于 2021-5-7 19:19:28

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;
}

Stubborn 发表于 2021-5-7 20:02:09

为什么终端会输出 5 个数>>>
递归递归,递完之后就有归。你的fun函数只有一个递归出口,所以每次调用都会打印一次。

if else里面可以直接返回出去了,当然,去掉fun里面的打印s的调用,也可以去掉5次打印

害羞的新手 发表于 2021-5-7 21:20:34

Stubborn 发表于 2021-5-7 20:02
为什么终端会输出 5 个数>>>
递归递归,递完之后就有归。你的fun函数只有一个递归出口,所以每次调用都会 ...

大佬能解释下他这5个输出为什么是
2   4    711   16
这么个顺序吗?

Stubborn 发表于 2021-5-7 21:55:58

本帖最后由 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)又是怎么运行的?结果是怎么一层一层往上“冒泡”的?

你要知道,函数调用就得出结果,出结果前就只能等结果。等下面函数传回来的过程叫归。

害羞的新手 发表于 2021-5-8 20:14:32

Stubborn 发表于 2021-5-7 21:55
递归递归啊,何时归何时打印,你想函数一层一层的调用,f(5) ->调用f(4)->f(3)->f(2)->f(2)
到f1之后 ...

我明白了,就是像洋葱一样,不过是先输出葱芯,再一层一层向外输出是吧。
页: [1]
查看完整版本: C语言递归问题