C语言 ——— 计算一个整数的每一位之和,递归实现

目录

代码要求

代码实现 

代码验证

n为1位数时

n为多位数时 

DigitSum(n)函数体分析

 DigitSum(n)函数体运行过程

当n为一位数时

当n为多位数时 


代码要求

  • 写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
  • 例如:调用DigitSum(1749),则应该返回1+7+4+9,也就是返回21

代码实现 

#include<stdio.h>

int DigitSum(int n)
{
	if (n <= 9)  
		return n;
	else  
		return DigitSum(n / 10) + n % 10;
}

int main()
{
	//输入
	int num = 0;
	scanf("%d", &num);

	//计算
	int ret = DigitSum(num);

	//输出
	printf("%d\n", ret);

	return 0;
}

代码验证

n为1位数时

n为多位数时 


DigitSum(n)函数体分析

当n为一位数时:直接返回n,因为一位数没有其他位能相加

if (n <= 9)  
	return n;

当n为多位数时:先把n的个位单独剥离出来,单独加在旁边,再重新传递给DigitSum(n)函数剥离出来后的n,重复往返,形成递归

else  
	return DigitSum(n / 10) + n % 10;

 DigitSum(n)函数体运行过程

int DigitSum(int n)
{
	if (n <= 9)  
		return n;
	else  
		return DigitSum(n / 10) + n % 10;
}

当n为一位数时

例如输入的n为9时:进行if判断,n <= 9 成立,直接返回n即可

当n为多位数时 

例如输入的n为174时:

第一次进入函数:判断n后执行else中的语句,return DigitSum(174 / 10) + 174 %10,return时调用了DigitSum函数,所以要再次进入函数

进入第二次函数前:

174 / 10 = 17(整数除法,结果舍去小数)

174 % 10 = 4

第二次进入函数:判断n后执行else中的语句,return DigitSum(17 / 10) + 17 % 10,return时调用了DigitSum函数,所以要再次进入函数

进入第三次函数前:

17 / 10 = 1(整数除法,结果舍去小数)

17 % 10 = 7

第三次进入函数:判断n后执行if中的语句,return 1,直接返回1,这次返回后直接返回到第二次进入函数时

回到第二次进入函数:return 1 + 7,也就是return 8

回到第一次进入函数:return 8 + 4,也就是return 12

自此,递归结束,最后结果返回12

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值