@yakdd

Python. Рекурсивный подсчет суммы цифр?

Есть ряд цифр (например 456789). Нужно привести этот ряд к одной цифре след.образом:
456789: 4 + 5 + 6 + 7 + 8 + 9 = 39
39: 3 + 9 = 12
12: 1 + 2 = 3
Но функция возвращает не конечную сумму (3), а начальную (39)
Как это можно исправить?

def function(string):
    summ = 0
    lst = [int(i) for i in string]
    for i in lst:
        summ += i
    # print(summ)
    string = str(summ)
    if len(string) != 1:
        function(string)
    return summ


numbers = '456789'
print(function(numbers))
  • Вопрос задан
  • 641 просмотр
Пригласить эксперта
Ответы на вопрос 4
@twistfire92
Python backend developer
функция принимает на вход число. Возвращает число.
def f(x):
	if x < 10:
		return x
	else:
		return f(sum(int(i) for i in str(x)))
Ответ написан
Комментировать
@galaxy
if len(string) != 1:
  return function(string)
Ответ написан
MinTnt
@MinTnt
fun = lambda s: fun(str(sum(map(int, s)))) if len(s)-1 else s

print(fun('456789'))

Довольно интересная задача. Пока писал решение, так же узнал, что рекурсия позволительна и для lambda функций
Ответ написан
@Drill
Вполне можно обойтись без рекурсии.
def function(string):
    while len(string) > 1:
        string = str(sum(int(i) for i in string))
    return string
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы