递归--鸡哥的魔法石

问题描述:

在鸡哥的家乡,有一个传说,说是有一块神奇的魔法石,这块石头有个奇特的属性,它可以吸收一个整数X的能量。每次吸收时,它会将这个数字的所有数位上的数字之和从X中减去,并继续吸收新的能量,直到吸收的能量为0。鸡哥被这个奇怪的现象所吸引,它想知道,如果它有一个整数X,魔法石需要吸收几次能量才能将这个数字消耗为0。

输入:

第一行输入整数X

输出:

第一行包含一个整数,代表魔法石需要吸收的次数。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
using namespace std;
int sum(int N, int sumN) //求一个整数的数位之和
{
if (N < 10)
return sumN += N; //递归终止条件
sumN += N % 10;
return sum(N / 10, sumN); //递归表达式
}

int fun1(int N, int num) //递归相减,鸡哥吸收能量
{
if (N == 0)
return num; //递归终止条件
int sumN = 0;
sumN = sum(N, 0);
N -= sumN;
return fun1(N, num += 1); //递归表达式
}

int main()
{
int N, num = 0;
cin >> N;
cout << fun1(N, num);//原题目有问题,这里最后要加1才对?我不理解
return 0;
}