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

时间:2013-11-21 20:08:27

标签: python function recursion

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()

8 个答案:

答案 0 :(得分:3)

ä¸ï¼Œå®ƒä¸æ˜¯é€’归的,因为你没有从函数内部调用函数。

å°è¯•ï¼š

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

答案 1 :(得分: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

答案 2 :(得分:1)

对于è¦é€’归的函数,它必须在自身内部调用。此外,由于您当å‰çš„ä¸æ‰§è¡Œæ­¤æ“作,因此ä¸æ˜¯é€’归的。

这是一个简å•çš„递归函数,å¯ä»¥æ‰§è¡Œæ‚¨æƒ³è¦çš„æ“作:

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

答案 3 :(得分:0)

你没有åšä¸€ä¸ªé€’归步骤(在里é¢è°ƒç”¨sumdigits())ï¼

答案 4 :(得分: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

答案 5 :(得分:0)

虽然递归是一ç§èªæ˜Žçš„方法,但由于性能和逻辑原因,我通常会远离它(它å¯èƒ½å¾ˆå¿«å˜å¾—å¤æ‚)。我知é“è¿™ä¸æ˜¯ä½ è¦æ‰¾çš„答案,但我个人åšæŒè¿™æ ·æˆ–类似的循环:

def sumdigits(number):
    return sum(map(int, str(number)))
ç¥ä½ å¥½è¿ï¼

答案 6 :(得分:0)

我最近正在研究这个项目,希望它能对以åŽçš„人有所帮助

def digit(n):
    p=0
    for i in str(n):
        p += int(i)
    return p

def superDigit(n):  
    if n==0:
       return 0
    return digit(digit(digit(digit(n))))

答案 7 :(得分:0)

这是对一系列整数数字求和的解决方案,该解决方案使用三元è¿ç®—符与递归和一些仅在第一次通过函数时å‘生的å‚数检查。一些 Python ç¼–ç äººå‘˜å¯èƒ½è®¤ä¸ºè¿™ä¸å¤ª Pythonic(使用三元表达å¼ï¼‰ï¼Œä½†æ˜¯ï¼Œå®ƒæ¼”示了如何使用递归,回答原始问题,åŒæ—¶å¼•å…¥ä¸‰å…ƒè¿ç®—符将一些多行 if/else 语å¥ç»„åˆæˆç®€å•çš„数学。

注æ„:

  • int * True = int,而 int * False = 0

  • float * True = Float,而 float * False = 0

  • "Text" * True = "Text",但是 "Text" * False = "";但也

  • "Text" * 0 = "",而 "Text" * 3 = "TextTextText"

  • “文本†* 浮点数 = 错误;而 "Text" * int = Error

  • å•è¡Œ if/else 语å¥å¦‚下: Expression_if_True if Condition_to_Check else Expression_if_False

     def digitSum2(n = 0, first = True):
         if first:
             first = False
             if type(n) != int or n < 0:
                 return "Only positive integers accepted."
         return (n * (n < 10) + (n % 10 + digitSum2(n // 10, first)) * (n >= 10)) if (n > 0) else 0