我是c编程的新手。我编写了这个程序并希望打印0, 1, 2, 3
,但它正在打印0,1,2,0
。我正在学习递归。为什么打印0,1,2,0
请逐步解释。
#include <stdio.h>
void fun(int);
typedef int (*pf) (int, int);
int proc(pf, int, int);
int main()
{
int a = 3;
fun(a);
return 0;
}
void fun(int n)
{
if (n > 0)
{
fun(--n);
printf("%d,", n);
fun(--n);
}
}
答案 0 :(得分:2)
查看程序无法打印3的最简单方法是,在调用任何fprintf之前,代码必须始终运行 - 至少一次,因此无法打印起始值。
要完成注释中提到的代码,可以将函数写为“块”,如下面的伪代码中所述,约定n的更新值在被调用函数中被突变但是当然不是相反。然后流程看起来像:
{n:3--->2
{n:2--->1
{n:1--->0
{n:0 ---> return}
print(n=0)
n:0--->-1
{n:-1 ---> return}
}
print(n=1)
n:1--->0
{n:0 ---> return}
}
print(n=2)
n:2--->1
{n:1--->0
{n:0 ---> return}
print(n=0)
n:0--->-1
{n:-1 ---> return}
}
}
打印确实是0,1,2,0。
答案 1 :(得分:0)
其中一个问题来自--n
。实际上,这不是一条指令,而是两条指令--n
等于n=n-1
。因此,您永远不会打印从函数调用中获得的值,但值将减去一个值。这就是为什么你得到的最大值是2。
然后,我让你找到如何自己解决问题。正如@Iharob和@Zimano向你建议的那样,把它写在纸上会对你有帮助。