C 无法输入函数结果

C 无法输入函数结果,c,C,当我输入(n=4)时,我得到(1 2 1 3 1 2 1 4 1 2 1 2 1) 所以我不明白:它是怎么做到的?有人能一步一步地给我解释一下吗?首先请注意,只有当n为0或负时才返回一个值,所以如果你用大于零的参数调用fun,然后尝试使用返回值,你就调用了未定义的行为。您应该在if的两个分支中都有一个return语句,或者删除return语句并将函数的返回类型更改为void 至于为什么函数会打印它打印的内容,让我们从基本情况开始逐步处理这个问题: 如果以0作为参数(或负数)调用fun,会发生什么

当我输入
(n=4)
时,我得到
(1 2 1 3 1 2 1 4 1 2 1 2 1)


所以我不明白:它是怎么做到的?有人能一步一步地给我解释一下吗?

首先请注意,只有当n为0或负时才返回一个值,所以如果你用大于零的参数调用fun,然后尝试使用返回值,你就调用了未定义的行为。您应该在if的两个分支中都有一个return语句,或者删除return语句并将函数的返回类型更改为void

至于为什么函数会打印它打印的内容,让我们从基本情况开始逐步处理这个问题:

如果以0作为参数(或负数)调用fun,会发生什么?if条件为false,它直接进入return语句-不打印任何内容。非常有趣(0);不打印任何内容。好的

现在发生了什么有趣的事情(1)?这一次if条件为true,因此执行主体。正文由三个涉及n的函数调用组成。因为n是1(因此n-1是0),我们得到:fun(0);,printf(“%d”,1);又是乐趣(0);。正如我们在上一段中所确定的,fun(0);不打印任何内容,所以只打印“1”

现在发生了什么有趣的事情(2)?同样,如果条件为true,则执行主体。正文由三个涉及n的函数调用组成。因为n是2(因此n-1是1),我们得到:fun(1);,printf(“%d”,2);又一次有趣(1);。正如我们在上一段中所确定的,乐趣(1);打印“1”,这样将打印“1”,然后再打印“2”,然后再打印“1”,使f(2)的最终输出为“1”


现在,如果您继续使用这种方法获得乐趣(3)和乐趣(4),您将获得与您发布的相同的乐趣(4)输出。

一般来说,如果您需要逐步了解函数的功能,您可以使用调试器。您无法完全更改现有问题。这使答案无效。如果你有一个新问题,你应该用一个新的思路提问,但是请注意,你所问的是离题的。
int fun(int n)
{
    if (n > 0) 
    {
        fun(n-1);
    
        printf("%d ", n);
    
        fun(n-1);  
    }
    else
        return n; 
}