Mr丶张 发表于 2020-3-27 19:51:15

关于递归的问题

#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 4 3 2 1 0 0 0 1 2 3 4;
不应该是输出5 4 3 2 1 0就结束了吗

BngThea 发表于 2020-3-27 20:03:14

递归递归,有去有回,每次递归的时候后面的代码都是挂起的,后面的输出来自函数中最后那个printf

sunrise085 发表于 2020-3-27 20:14:49

这是因为你的递归函数中输出了两次。
把第12行去掉就可以了。
#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);
    }
}
int main(void)
{
    int n;
    printf("请输入一个整数:");
    scanf("%d", &n);
    up_and_down(n);
    putchar('\n');
    return 0;
}
页: [1]
查看完整版本: 关于递归的问题