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