繁体   English   中英

使用递归返回数字的位数

[英]Returning the digit count of a number using recursion

我试图使用递归返回数字中的数字计数,如下所示:DigitCount(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

怎么样呢?

def DigitCount(n):
    if n<10: return 1
    return 1 + DigitCount(n//10)

这个想法是:

  • 小于10的数字的长度为1
  • 大于10的数字的长度为1 + length(n // 10); 例如456的长度为1 + length(45)。

也可以使用字符串来完成。

def digitCount(n):
    if len(str(n)) == 1:
        return 1
    else:
        return 1 + digitCount(str(n)[1:])

它有点脏,效率很低,但是可以用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM