关于递归的课后问题,答案不能理解
#include <stdio.h>void up_and_down(int n);
void up_and_down(int n)
{
printf("%d ", n);
if (n > 0)
{
up_and_down(--n);
}
printf("%d ", n);
}
int main(void)
{
int n;
printf("请输入一个整数:");
scanf("%d", &n);
up_and_down(n);
putchar('\n');
return 0;
}
输入5的话
结果不应该是 5 4 3 2 1 0 0 1 2 3 4 5 吗?
为什么是5 4 3 2 1 0 0 0 1 2 3 4 5?
up_and_down(0),输出0之后因为不满足n > 0的条件,直接到if语句后的printf,再打印一次0,然后再依次打印 1 2 3 4 5.
我个人是这么理解的不知道哪里有错 本帖最后由 jackz007 于 2019-5-9 19:08 编辑
是 3 次打印 0 值,其中,2 次是在调用 up_and_down(0) 的时候,1 次是在调用 up_and_down(1) 的时候
up_and_down(0)
{
printf("%d ", n) ;// 第 1 次打印 0
if (n > 0) up_and_down(-- n) ;// 不执行此语句
printf("%d ", n) ;// 第 2 次打印 0
}
up_and_down(1)
{
printf("%d ", n) ;// 第 1 次打印 1
if (n > 0) up_and_down(-- n) ;// n = n - 1
printf("%d ", n) ;// 第 3 次打印 0
} 递归这东西,太复杂的理解其含义即可。
如果你想了解递归的原理,简单代码走流程; 如果你不用心走流程,即使别人讲一万遍你也不了解
结果不应该是5 4 3 2 1 0 0 0 1 2 3 4吗?
页:
[1]