你的问题有两个部分。
- 在 number 中找到个数。
- 在所有小于它(但大于零)的数字中找到一个数。
第一部分:
如果最右边的数字是 1,则number % 10 == 1
. 如果数字 > 9,您需要检查其他数字,您可以通过对整数除以 10 后的数字进行相同的测试来做到这一点。如果数字 <= 9,那么这会给你零。
所以你的 OnesInNumber 函数有点像:
- 如果数字 == 0,则返回 0。
- 否则调用 OnesInNumber on
number / 10
。
- 如果
number % 10 == 1
将该结果加 1。
- 返回结果。
例如,当1
被调用时给你,,,,,当被调用时给你10
,等等。1
12
303212
2
11
你的 OnesInZeroUntil 函数就像:
- 如果数字 <= 0,则返回 0。
- 否则调用 OnesInZeroUntil on
number - 1
。
- 添加
OnesInNumber(number)
到此。
- 返回结果。
所以你有一个递归函数可以计算出一个数字1
中的个数,另一个递归函数可以计算出1
每个数字中的个数,直到那个数字,建立在第一个函数的基础上。
如果您没有要求我们不这样做,这足以编写一个快速的 2 个函数。
(提示:如果你的老师还没有要求它,看看你是否可以在没有递归的情况下解决这个问题。每个递归函数都可以重写为非递归形式,这是一项实用技能这样做有些人教递归似乎没有涵盖)。