鱼C论坛

 找回密码
 立即注册
查看: 1375|回复: 4

[已解决]C语言递归问题

[复制链接]
发表于 2021-5-7 19:19:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这段代码我有两个问题
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;
}
最佳答案
2021-5-7 20:02:09
为什么终端会输出 5 个数>>>
递归递归,递完之后就有归。你的fun函数只有一个递归出口,所以每次调用都会打印一次。

if else里面可以直接返回出去了,当然,去掉fun里面的打印s的调用,也可以去掉5次打印
截屏2021-05-07 19.18.39.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-7 20:02:09 | 显示全部楼层    本楼为最佳答案   
为什么终端会输出 5 个数>>>
递归递归,递完之后就有归。你的fun函数只有一个递归出口,所以每次调用都会打印一次。

if else里面可以直接返回出去了,当然,去掉fun里面的打印s的调用,也可以去掉5次打印
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

大佬能解释下他这5个输出为什么是
2   4    7  11   16
这么个顺序吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-7 21:55:58 | 显示全部楼层
本帖最后由 Stubborn 于 2021-5-7 21:57 编辑
害羞的新手 发表于 2021-5-7 21:20
大佬能解释下他这5个输出为什么是
2   4    7  11   16
这么个顺序吗?


递归递归啊,何时归何时打印,你想函数一层一层的调用,f(5) ->调用f(4)->f(3)->f(2)->f(2)
到f1之后,是怎么运行程序的?f(1)结果返回给谁,返回之后,f(2)又是怎么运行的?结果是怎么一层一层往上“冒泡”的?

你要知道,函数调用就得出结果,出结果前就只能等结果。等下面函数传回来的过程叫归。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我明白了,就是像洋葱一样,不过是先输出葱芯,再一层一层向外输出是吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 11:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表