使用递归返回数字的数字计数

时间:2015-11-14 21:32:21

标签: python recursion

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

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

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

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

我收到一条错误消息,提到' RecursionError:超出最大递归深度'

3 个答案:

答案 0 :(得分:2)

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

在编写递归过程时,你必须考虑如何在每次调用时使问题更小(在这种情况下,除以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

答案 1 :(得分:1)

如下:

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

这个想法是:

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

答案 2 :(得分:1)

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

   var 
   board = document.getElementById("board"),

   imgArray = ['image1','image2','image2','image3',. . .],

   loadImage = function(e) {
     var elem = e.target; 
     if(elem.tagName == 'TD') {
        elem.innerHTML = '<img src="'+imageArray[Number(elem.id)]+'">';
     }
  };

  board.addEventListener('click',loadImage,false);

它有点脏,效率很低但有效。