python - 使用递归返回数字的位数

标签 python recursion

我正在尝试使用如下递归返回数字中的位数: 数字计数(3456)→ 4。 我没有使用递归的代码工作正常,它是:

    def DigitCount(n)
        return len(str(n))

但是当我尝试以这种方式使用递归时:

    def DigitCount(n):
        return len(str(DigitCount(n)))

我收到一条错误消息,内容为“RecursionError:超出最大递归深度”

最佳答案

你的递归函数的问题是你没有指定一个基本情况来结束递归,产生了一个以堆栈溢出结束的无限循环。

在编写递归过程时,您必须考虑如何在每次调用时缩小问题(在这种情况下,除以 10 就可以了),直到达到问题非常简单,您已经知道答案的地方 - 例如,小于 10 的数字只有一个数字。试试这个:

def DigitCount(n):
    if n < 10:
        return 1
    else:
        return 1 + DigitCount(n / 10) # use n // 10 in Python 3.x

只要 n 大于或等于零,它就会按预期工作:

DigitCount(0)
=> 1
DigitCount(234)
=> 3

关于python - 使用递归返回数字的位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33713620/

相关文章:

Python 预设参数列表

python - 如何在pandas中将数组列读取为数组而不是字符串

python - 在第二次出现字符后拆分文本

math - F# 理解递归函数

python - 查找两个日期时间数组 python 之间的重复日期

python - Django 动态 url 参数名称

c - 在 C 中使用递归缩进行

list - 无法理解 Haskell 中的原始递归定义

sqlite - 如何在插入时自动将日期设置为当前日期

javascript - 递归可以调用多少次?