文章目录
思路
首先,想要通过递归使每一个数相加,就需要算出每一位上的数值再相加。其中最好算的是算个位数。
//x赋值为n的个位数
x = n % 10;
每一次递归的时候都会先得到个位再加上下一位数得值,想要得到下一位数的值只需要除以十,而下一次计算的时候,十位上的数字就会变成个位上的数字,以此类推,就得到了所有位上的数字。
if (n / 10 == 0)
return x;
//递归相加
return DigitSum(n / 10) + x;
代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int DigitSum(int n)
{
int x = 0;
//x赋值为n的个位数
x = n % 10;
//判断n是否为n的首位数
if (n / 10 == 0)
return x;
//递归相加
return DigitSum(n / 10) + x;
}
int main()
{
int num = 0;
scanf("%d", &num);
int ret = DigitSum(num);
printf("%d", ret);
return 0;
}
优化
只要n不大于等于10,该函数就可以终止了,优化后代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int DigitSum(int n)
//{
// int x = 0;
// //x赋值为n的个位数
// x = n % 10;
// //判断n是否为n的首位数
// if (n / 10 == 0)
// return x;
// //递归相加
// return x+DigitSum(n / 10);
//}
int DigitSum(int n)
{
if (n > 9)
return n % 10 + DigitSum(n / 10);
else
return n;
}
int main()
{
int num = 0;
scanf("%d", &num);
int ret = DigitSum(num);
printf("%d", ret);
return 0;
}