喜你 发表于 2021-11-6 21:33:49

函数递归

#include <stdio.h>

void printdigits( int n );

int main()
{
    int n;

    scanf("%d", &n);
    printdigits(n);

    return 0;
}
void printdigits( int n )
{if(n<10)printf("%d\n",n);
    else {printdigits(n/10);
printf("%d\n",n%10);
}
}



不太理解阿,谁可以给我讲一讲函数过程如何运算的

jackz007 发表于 2021-11-7 00:11:15

本帖最后由 jackz007 于 2021-11-7 00:17 编辑

      代码改造一下,更容易说明问题
#include <stdio.h>

void printdigits(int n )
{
      if(n) {
                printdigits(n / 10)   ;
                printf("%d\n" , n % 10) ;
      }
}

int main()
{
    int n;

    scanf("%d", &n);
    printdigits(n)   ;

    return 0;
}
      现在以 n = 123456 为例来看看 printdigits() 函数的递归过程
printdigits(123456)
    printdigits(12345)
      printtdigits(1234)
            printtdigits(123)
                printtdigits(12)
                  printtdigits(1)
                        printtdigits(0)-- n = 0 ,递归到达底部
                  printf(1 % 10) --> 1
                printf(12 % 10) --> 2
            printf(123 % 10) --> 3
      printf(1234 % 10) --> 4
    printf(12345 % 10) --> 5
printf(12346 % 10) --> 6
      从改过的代码可以看出,在 n > 0 情况下,将一直递归,每次递归的新 n 是 n / 10,这样递归到第 6 次的时候,n 为 0 值,这时,递归到达底部,开始返回,在逐级返回的过程中,每一级均打印本级的 n % 10,一共打印 6 个数,于是,就看到了依次打印输出的 1、2、3、4、5、6。
页: [1]
查看完整版本: 函数递归