当前位置: 首页 > news >正文

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

#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(也就是求个位数),最后让他们加起来就行了

递归过程是这样的:

DigitSum(123) → 3 + DigitSum(12)  
DigitSum(12)  → 2 + DigitSum(1)  
DigitSum(1)   → 1  
最终结果:3 + 2 + 1 = 6  

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

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

运行结果如下:

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

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

相关文章:

  • Axure设计之下拉多选框制作教程B(中继器)
  • 【Aioredis实战总结】Aioredis简介
  • 详解Flutter单线程模型,以及Flutter是如何通过单线程实现异步的
  • Go语言os标准库
  • SSA-随机森林分类预测matlab代码
  • 【Linux】https 协议
  • 用SpringBoot做一个web小案例配置拦截器判断登录状态
  • 某省政务信创案例:3阶段实施×5类工具链选型经验分享
  • 新型XCSSET恶意软件利用增强混淆技术攻击macOS用户
  • 【漫话机器学习系列】136.随机变量(Random Variable)
  • Windows系统中安装Rust工具链方法
  • VSCode + CMake
  • Linux 中的 likely 和 unlikely
  • Docker安装mysql——Linux系统
  • 安卓屏保调试
  • 五子棋小游戏-简单开发版
  • 【数据分析】读取文件
  • 部署 T-Pot:构建高级威胁捕获与分析平台的精妙指南
  • DNS服务和实验
  • uniapp 多环境配置打包,比较优雅的解决方案,全网相对优解
  • 贵州茅台:支持工作餐不上酒的规定,请投资者相信茅台创新和自我调节能力
  • 前4个月全国新建商品房销售面积降幅收窄,房地产库存和新开工有所改善
  • 复旦一校友捐赠1亿元,却不留名
  • 又一例!易方达基金张坤卸任副总职务,将专注于投资管理工作
  • 美国将与阿联酋合作建立海外最大的人工智能数据中心
  • 巴基斯坦与印度停火延长至18日