【问题标题】:Recursion function for counting the number of digits in a number?用于计算数字中位数的递归函数?
【发布时间】:2014-12-02 04:01:27
【问题描述】:

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

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


    【解决方案1】:

    问题是,

        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)
    

    【讨论】:

    • 我知道这是如何导致问题的,由于某种原因,我仍然遇到问题,因为当我输入诸如 5443 之类的数字时,它会打印出数字 2 3 2 4 2 3 2
    • @MrPorba 删除打印
    • 不会导致它在空闲窗口中根本不打印任何内容吗?
    • @MrPorba digit(n) 将打印实际结果。
    【解决方案2】:
      #!/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)
    

    【讨论】:

      猜你喜欢
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 2015-12-15
      • 1970-01-01
      • 2014-06-18
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多