2013-11-21 2 views
1
def sumdigits(number): 
    if number==0: 
    return 0 
    if number!=0: 
    return (number%10) + (number//10) 

это функция, которую у меня есть. Однако он дает только правильную сумму двухзначных чисел. Как я могу получить сумму любого числа. также будет засчитываться моя функция, как рекурсииФункция рекурсии для нахождения суммы цифр в целых числах с использованием python

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

ответ

0

Вы не сделать рекурсивный шаг (вызов sumdigits() внутри)!

3

Нет, это не рекурсивно, поскольку вы не вызываете свою функцию из своей функции.

Try:

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

Для функции рекурсивной, она должна называть себя внутри себя. Кроме того, поскольку ваш текущий не делает этого, он не рекурсивный.

Вот простая рекурсивная функция, которая делает то, что вы хотите:

>>> def sumdigits(n): 
...  return n and n%10 + sumdigits(n//10) 
... 
>>> sumdigits(457) 
16 
>>> sumdigits(45) 
9 
>>> sumdigits(1234) 
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

return (number% 10) + sum_digits (number // 10) # Typo – Kris1511

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 
0

Хотя рекурсия - это умный способ пойти, я, как правило, держался подальше от нее по соображениям производительности и логики (он может стать довольно сложным). Я знаю, что это не ответ, который вы ищете, но я бы лично придерживаться что-то вроде этого или какого-то цикла:

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

Удачи!

Смежные вопросы