(C语言之递归运用)计算一个数的每位之和(递归实现)

题目如下:

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

例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19

输入:1729,输出:19

        废话不多说直接上代码

#include
int DigitSum(int n)
{
	if (n / 9 == 0)
		return n;//如果是一位数直接输出
	else
	{
		int i = 99, j = 900;
		while (1)
		{
			if (n / i == 0)//判断两位数,三位数,四位数......
			{
				return n % 10 + DigitSum(n / 10);//经典递归思路,拆分
				break;//一旦判断出几位数直接跳出循环
			}
			i *= j;
			j *= 10;//使i==99,999,9999......来判断几位数
		}
	}
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	printf("%d", DigitSum(n));//调用递归函数
	return 0;
}

 来看运行结果,完全问题,可以代入多组数据多试试

现在来说说底层逻辑

输入一个数如:1739,想要输出它的每一位之和即:1+7+3+9 

那么可以把它先拆分成: 173+9

其次是:                          17+3+9

再然后:                          1+7+3+9

其实这就是递归算法的典型思路

不过这里不用递归依然可以容易地实现,但是平时刷题时偶尔尝试着用递归,用多了就熟练了,碰到一般方法实现不了的时候就可以试着用递归。

你可能感兴趣的:(C语言基础,C语言算法题,c语言,算法,c++)