Marcccccy 发表于 2020-5-29 23:00:15

阅读函数,求输出

代码是这样子的:
#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:12:25

本帖最后由 赚小钱 于 2020-5-30 00:14 编辑

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

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

推荐,先花费一定的时间,学会单步调试。没有什么是单步调试解决不了的。

我叫MD 发表于 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函数,打印换行,结束执行

能看懂我的描述最好,看不懂的话,自己会调试,则调试几次,也能理清楚了,如果还没理清楚,建议先放过递归,等候时间,慢慢了解,了解了之后便自然而然懂了

Marcccccy 发表于 2020-5-30 20:57:48

赚小钱 发表于 2020-5-30 00:12
递归函数,基础知识。各大教材均有讲解。

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


谢谢您提供的资料!!就是全英文的对我还有点难度【捂脸】

Marcccccy 发表于 2020-5-30 20:59:22

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

我们考试卷子上的题目……{:10_262:}
啊啊您一步一步讲的太细致了,我看懂辽!!太感谢您了!!{:10_287:}
页: [1]
查看完整版本: 阅读函数,求输出