鱼C论坛

 找回密码
 立即注册
查看: 2465|回复: 1

函数递归

[复制链接]
发表于 2021-11-6 21:33:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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);
}
}



不太理解阿,谁可以给我讲一讲函数过程如何运算的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-29 23:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表