题目
如题目所示:超级无敌大水题递归、迭代
思路
根据题意,最终结果应该是一个个位数,并且对于一个不是个位数的数,我们都可以根据一个相同的算法将其转为个位数,所以这道题是一个练习递归的入门题。
另外,这道题也可以用迭代法,和递归法大同小异。
代码
#include <stdio.h>
int dfs(int n) {
// 不是个位数就不放你走
if (n <= 9) return n;
int a = 0;
while (n) {
a += n % 10;
n /= 10;
}
// 直到变成个位数
return dfs(a);
}
int main(void) {
int n = 0;
scanf("%d", &n);
printf("%d\n", dfs(n));
return 0;
}
递归的其他写法:
#include <stdio.h>
int dfs(int n) {
if (n <= 9) return n;
return dfs(n % 10 + dfs(n / 10));
}
int main(void) {
int n = 0;
scanf("%d", &n);
printf("%d\n", dfs(n));
return 0;
}
迭代法
#include <stdio.h>
int main(void) {
int n = 0, t = 0;
scanf("%d", &n);
while (n > 9) {
t = n;
n = 0;
while (t) {
n += t % 10;
t /= 10;
}
}
printf("%d\n", n);
return 0;
}