计算数字位数的递归函数?

问题描述 投票:0回答:4

所以我知道这是一个简单的事情,可以在没有递归函数的情况下完成,但我需要知道它的背面,因为我似乎不知道如何使用递归来编写它。我到目前为止正在使用这个

n = int(raw_input("What is n? "))
def digit(n):
    if n< 10:
        return 1
    else:
        new = n/10
        print 1 + digit(new/10)
        return 1 + digit(new/10)

digit(n)

现在,如果我输入一个数字,例如 33,那么它会输出 2,但是如果我输入更长的数字,那么它就无法正确打印,而且我不确定它到底出了什么问题。

python recursion
4个回答
3
投票

问题是,

    new = n/10
    return 1 + digit(new/10)

您已经在

new = n / 10
中将数字除以 10,这会减少最后一位数字,并且在调用
digit
之前再次将其除以 10。因此,您在每次递归调用中都会忽略 1 位数字。

相反,你可以简单地做

    return 1 + digit(n / 10)

    new = n / 10
    return 1 + digit(new)

1
投票
  #!/usr/bin/python

  n = int(raw_input("What is n? "))

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

  print digit(n)

0
投票

你也可以这样做。

def counter(number):
    if(number == 0):
        return 0
    return counter(int(number/10)) + 1

number = 1998
print(counter(number)) // it will print 4

0
投票

n = int(raw_input("n 是什么?"))

定义数字(n): 如果 n < 10: return 1 else: return 1 + digit(n/10)

打印数字(n)

© www.soinside.com 2019 - 2024. All rights reserved.