六一九 发表于 2019-5-9 18:44:43

关于递归的课后问题,答案不能理解

#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:05:43

本帖最后由 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
}

ba21 发表于 2019-5-9 19:16:33

递归这东西,太复杂的理解其含义即可。
如果你想了解递归的原理,简单代码走流程; 如果你不用心走流程,即使别人讲一万遍你也不了解


mqcake 发表于 2019-5-10 08:52:55

结果不应该是5 4 3 2 1 0 0 0 1 2 3 4吗?
页: [1]
查看完整版本: 关于递归的课后问题,答案不能理解