一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第23天,点击查看活动详情。
🚀write in front🚀
🔎大家好,我是泽奀,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🖊
前言
今天开始开始刷C语言题集得第四十一题,冲~已经有41题了。
题目描述
第四十一题→输入一个无符号数字,计算数字的每一位之和(用递归实现)
题目分析
输入一个无符号数字,无非就是用输入函数scanf()进行输入,但是要注意下这是无符号输入那么我们就要在数据类型前面加上unsigned才可以。
计算数字每一位之和,就是假设我们输入的数字是19,那么就是相当于9+1=10,这样。
用递归进行实现,在前面的题已经都说过了,那么再来说下。
概述:一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出。
那么递归它也是具有限制条件的,不然它就会造成死递归,这个就相当于死循环一样。
存在限制条件,当满足这个限制条件之后的时候,递归便会不再继续。
每次递归调用之后都会越来越接近这个限制条件。
题目代码
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int print(unsigned int n)
{
//这里之所以是n>9是因为n<10的话无论我们输入什么数字都是最终相加之和
if (n > 9)
{
//取模得到个位,除以得到十位。
return print(n / 10) + n % 10;
}
else
{
return n;
}
}
int main(void)
{
unsigned int num = 0;
printf("请输入数字→");
scanf("%d", &num);
int ret = print(num);
printf("ret = %d\n", ret);
return 0;
}
运行结果
运行结果🖊
请输入数字→1234
ret = 10
最后
这道题目还是很容易得,其实有时候递归不要想着这么复杂,按照自己递归想法来就可以了。明白限制条件以及题目规律即可。