(C语言)写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和(递归函数)

cpp 复制代码
#include <stdio.h>
int DigitSum(int n){
    if(n<10){
        return n;
    }
    return (n%10)+DigitSum(n/10);
}
int main(){
    printf("请输入一个非负整数:\n");
    int a=0;
    while(1){
        if(scanf("%d",&a)!=1 || a<0){
            printf("输入不合法请重新输入非负整数!!\n");
        }else{
            break;
        }
    }
    int x=DigitSum(a);
    printf("组成%d的数字之和是%d",a,x);
    return 0;
}

今天的代码非常的简单啊~

首先while函数判断输入是否合法,不合法就重新输入

然后定义递归函数思路:

要想实现这个功能,就要拆分这个非负整数,也就是各个位数分开,比如123,分成1 2 3,然后再相加即可

因此,我们用n/10,来剔除个位,以此调用递归,返回时,再用n%10(也就是求个位数),最后让他们加起来就行了

递归过程是这样的:

cpp 复制代码
DigitSum(123) → 3 + DigitSum(12)  
DigitSum(12)  → 2 + DigitSum(1)  
DigitSum(1)   → 1  
最终结果:3 + 2 + 1 = 6  

如果你对递归过程不了解,可以看我的这期博客:

(C语言)递归函数教学(C语言教学)-CSDN博客

运行结果如下:

cpp 复制代码
请输入一个非负整数:
123
组成123的数字之和是6
请按任意键继续. . .

注:该代码是本人自己所写,可能不够好,不够简便,欢迎大家指出我的不足之处。如果遇见看不懂的地方,可以在评论区打出来,进行讨论,或者联系我。上述内容全是我自己理解的,如果你有别的想法,或者认为我的理解不对,欢迎指出!!!如果可以,可以点一个免费的赞支持一下吗?谢谢各位彦祖亦菲!!!!!

相关推荐
reddingtons5 小时前
【游戏宣发】PS “生成式扩展”流,30秒无损适配全渠道KV
游戏·设计模式·新媒体运营·prompt·aigc·教育电商·游戏美术
你怎么知道我是队长5 小时前
C语言---枚举变量
c语言·开发语言
李慕婉学姐5 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
吃茄子的猫5 小时前
quecpython中&的具体含义和使用场景
开发语言·python
じ☆冷颜〃5 小时前
黎曼几何驱动的算法与系统设计:理论、实践与跨领域应用
笔记·python·深度学习·网络协议·算法·机器学习
云栖梦泽5 小时前
易语言中小微企业Windows桌面端IoT监控与控制
开发语言
数据大魔方5 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富
POLITE36 小时前
Leetcode 23. 合并 K 个升序链表 (Day 12)
算法·leetcode·链表
楚来客6 小时前
AI基础概念之八:Transformer算法通俗解析
人工智能·算法·transformer
Echo_NGC22376 小时前
【神经视频编解码NVC】传统神经视频编解码完全指南:从零读懂 AI 视频压缩的基石
人工智能·深度学习·算法·机器学习·视频编解码