鱼C论坛

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

[已解决]阅读函数,求输出

[复制链接]
发表于 2020-5-29 23:00:15 | 显示全部楼层 |阅读模式

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

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

x
代码是这样子的:
#include<stdio.h>
void f4(int n)
{
        if(n/10!=0) f4(n/10);
        printf("%d",n%10);
}

int main()
{
        f4(123);
        printf("\n");
        return 0;
}
请问一下这里的f4()函数到底怎么算的鸭……【捂脸】
最佳答案
2020-5-30 00:22:23
这个谁写的代码,这么恶心,该缩进的地方不缩进,if 判断还写一行了,第二次看到你问问题了,这个相对简单点解答一下

f4()  函数其实是个递归函数,该函数的作用相当于将输入的数字,按每一位输出出来, 比如:123   先输出 1 ,然后输出 2   然后输出 3

至于想搞清楚怎么算的,你理解递归了其实就懂了,我这里只能简单的说一下

首先:
    步骤1. 传入123, 进入函数,判断 n/10 是否为0(123/10 = 12),如果不为0,则说明,该数至少大于10,则再次调用f4()函数
    步骤2. 传入12,进入函数,判断 n/10 是否为0(12/10 = 1),如果不为0,则说明,该数至少大于10,则再次调用f4()函数
    步骤3. 传入 1,进入函数,判断 n/10 是否为0(1/10 = 0),如果不为0,则说明,该数至少大于10,这里等于0,则输出 n%10, 1%10 =1,输出1
    步骤4. 执行完步骤3后,f4()函数返回,返回到步骤2,步骤2中f4()函数调用完毕,则执行下一行 ,printf  这行, 12%10 = 2,输出2
    步骤5. 执行完步骤2后,f4()函数返回,返回到步骤1,步骤1中f4()函数调用完毕,则执行下一行 ,printf  这行, 123%10 = 3,输出3
    步骤6. 执行完步骤1后,f4()函数返回,返回到main函数,打印换行,结束执行

能看懂我的描述最好,看不懂的话,自己会调试,则调试几次,也能理清楚了,如果还没理清楚,建议先放过递归,等候时间,慢慢了解,了解了之后便自然而然懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-30 00:12:25 | 显示全部楼层
本帖最后由 赚小钱 于 2020-5-30 00:14 编辑

递归函数,基础知识。各大教材均有讲解。

https://www.geeksforgeeks.org/recursive-functions/

推荐,先花费一定的时间,学会单步调试。没有什么是单步调试解决不了的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-30 00:22:23 | 显示全部楼层    本楼为最佳答案   
这个谁写的代码,这么恶心,该缩进的地方不缩进,if 判断还写一行了,第二次看到你问问题了,这个相对简单点解答一下

f4()  函数其实是个递归函数,该函数的作用相当于将输入的数字,按每一位输出出来, 比如:123   先输出 1 ,然后输出 2   然后输出 3

至于想搞清楚怎么算的,你理解递归了其实就懂了,我这里只能简单的说一下

首先:
    步骤1. 传入123, 进入函数,判断 n/10 是否为0(123/10 = 12),如果不为0,则说明,该数至少大于10,则再次调用f4()函数
    步骤2. 传入12,进入函数,判断 n/10 是否为0(12/10 = 1),如果不为0,则说明,该数至少大于10,则再次调用f4()函数
    步骤3. 传入 1,进入函数,判断 n/10 是否为0(1/10 = 0),如果不为0,则说明,该数至少大于10,这里等于0,则输出 n%10, 1%10 =1,输出1
    步骤4. 执行完步骤3后,f4()函数返回,返回到步骤2,步骤2中f4()函数调用完毕,则执行下一行 ,printf  这行, 12%10 = 2,输出2
    步骤5. 执行完步骤2后,f4()函数返回,返回到步骤1,步骤1中f4()函数调用完毕,则执行下一行 ,printf  这行, 123%10 = 3,输出3
    步骤6. 执行完步骤1后,f4()函数返回,返回到main函数,打印换行,结束执行

能看懂我的描述最好,看不懂的话,自己会调试,则调试几次,也能理清楚了,如果还没理清楚,建议先放过递归,等候时间,慢慢了解,了解了之后便自然而然懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-30 20:57:48 | 显示全部楼层
赚小钱 发表于 2020-5-30 00:12
递归函数,基础知识。各大教材均有讲解。

https://www.geeksforgeeks.org/recursive-functions/

谢谢您提供的资料!!就是全英文的对我还有点难度【捂脸】
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-30 20:59:22 | 显示全部楼层
我叫MD 发表于 2020-5-30 00:22
这个谁写的代码,这么恶心,该缩进的地方不缩进,if 判断还写一行了,第二次看到你问问题了,这个相对简单 ...

我们考试卷子上的题目……
啊啊您一步一步讲的太细致了,我看懂辽!!太感谢您了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 19:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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