首页 文章

递归函数,使用python查找整数中的数字总和

提问于
浏览
2
def sumdigits(number):
  if number==0:
    return 0
  if number!=0:
    return (number%10) + (number//10)

这是我的功能 . 然而,它只给出2位数字的正确总和 . 我怎样才能得到任何数字的总和 . 我的函数也算作递归

def main():
    number=int(input("Enter a number :"))
    print(sumdigits(number))
main()

6 回答

  • 1

    不,它不是递归的,因为你没有从函数内部调用函数 .

    尝试:

    def sumdigits(number):
      if number == 0:
        return 0
      else:
        return (number%10) + sumdigits(number//10)
    
  • 2

    递归是一种编程或编码问题的方法,其中函数在其体内调用自身一次或多次 .

    通常,它返回此函数调用的返回值 . 如果函数定义满足递归条件,我们将此函数称为递归函数 .

    递归函数必须终止才能在程序中使用 . 通常,它会终止,如果每次递归调用,问题的解决方案都会缩小并移向基本情况 . 基本情况是一种情况,可以在没有进一步递归的情况下解决问题 . (如果在调用中不满足基本情况,则递归可能导致无限循环) . 对于这个问题,“基本案例”是:

    if number == 0:
        return 0
    

    用于求和数字的所有数字的简单递归函数是:

    def sum_digits(number):
        """ Return the sum of digits of a number.
            number: non-negative integer
        """
    
        # Base Case
        if number == 0:
            return 0
        else:
            # Mod (%) by 10 gives you the rightmost digit (227 % 10 == 7), 
            # while doing integer division by 10 removes the rightmost 
            # digit (227 // 10 is 22)
    
            return (number % 10) + sumdigits(number // 10)
    

    如果我们运行代码,我们有:

    >>>print sum_digits(57) # (5 + 7) = 12 
    12
    >>>print sum_digits(5728) # (5 + 7 + 2 + 8) = 22
    22
    
  • 0

    对于要递归的函数,它必须在自身内部调用自身 . 此外,由于您当前的不这样做,它不是递归的 .

    这是一个简单的递归函数,可以执行您想要的操作:

    >>> def sumdigits(n):
    ...     return n and n%10 + sumdigits(n//10)
    ...
    >>> sumdigits(457)
    16
    >>> sumdigits(45)
    9
    >>> sumdigits(1234)
    10
    >>>
    
  • 0

    你没有做一个递归步骤(在里面调用 sumdigits() )!

  • 0

    我相信这就是你要找的东西:

    def sum_digits(n):
        if n < 10:
            return n
        else:
            all_but_last, last = n // 10, n % 10
            return sum_digits(all_but_last) + last
    
  • 3

    虽然递归是一种聪明的方法,但由于性能和逻辑原因,我通常会远离它(它可能很快变得复杂) . 我知道这不是你要找的答案,但我个人坚持这样或类似的循环:

    def sumdigits(number):
        return sum(map(int, str(number)))
    

    祝好运!

相关问题