投入就放过 发表于 2022-3-2 15:33:51

c语言 递归

#include <stdio.h>

void printN(int n);

void printN(int n)
{
        if(n)
        {
                printN(n--);
                printf("%d\n",n);         //想用递归打印出1~10,这么些哪里错了呢
        }
}

int main(void)
{
        int n;
       
        printf("请输入一个数字:");
        scanf("%d",&n);
       
        printN(n);
       
        return 0;
}

isdkz 发表于 2022-3-2 15:37:16

本帖最后由 isdkz 于 2022-3-2 15:42 编辑

因为 n-- 是先使用再自减,也就是说你每次递归传入的都是 n,

应该把 n-- 改成 --n,还有你用 n 作为条件的话,只有 n 为 0 时才结束递归,

想从 1 开始的话,得把递归条件改成 n >= 2
void printN(int n);

void printN(int n)
{
      if(n >= 2)
      {
                printN(--n);                // 改这里
                printf("%d\n",n);         //想用递归打印出1~10,这么些哪里错了呢
      }
}

int main(void)
{
      int n;
      
      printf("请输入一个数字:");
      scanf("%d",&n);
      
      printN(n);
      
      return 0;
}

投入就放过 发表于 2022-3-2 16:23:07

isdkz 发表于 2022-3-2 15:37
因为 n-- 是先使用再自减,也就是说你每次递归传入的都是 n,

应该把 n-- 改成 --n,还有你用 n 作为条 ...

懂了懂了
页: [1]
查看完整版本: c语言 递归