Вы ничего не делаете с результатом вашего рекурсивного вызова - вот почему ваш код работает неправильно.
Итерирование по индексу в большинстве случаев нехорошо - лучше итерировать по строке напрямую.
Это более чистый способ рекурсии с использованием некоторых встроенных python функций:
def rec_sum(n):
sn = str(n)
# base case - return the number
if len(sn)==1:
return n
# not the base case,return whatever the recursive output returns
return rec_sum(sum(map(int,sn)))
for n in range(1,71):
print(f"{n:3}=>{rec_sum(n):3}", end = "|")
if n%7 == 0:
print()
Вывод:
1=> 1| 2=> 2| 3=> 3| 4=> 4| 5=> 5| 6=> 6| 7=> 7|
8=> 8| 9=> 9| 10=> 1| 11=> 2| 12=> 3| 13=> 4| 14=> 5|
15=> 6| 16=> 7| 17=> 8| 18=> 9| 19=> 1| 20=> 2| 21=> 3|
22=> 4| 23=> 5| 24=> 6| 25=> 7| 26=> 8| 27=> 9| 28=> 1|
29=> 2| 30=> 3| 31=> 4| 32=> 5| 33=> 6| 34=> 7| 35=> 8|
36=> 9| 37=> 1| 38=> 2| 39=> 3| 40=> 4| 41=> 5| 42=> 6|
43=> 7| 44=> 8| 45=> 9| 46=> 1| 47=> 2| 48=> 3| 49=> 4|
50=> 5| 51=> 6| 52=> 7| 53=> 8| 54=> 9| 55=> 1| 56=> 2|
57=> 3| 58=> 4| 59=> 5| 60=> 6| 61=> 7| 62=> 8| 63=> 9|
64=> 1| 65=> 2| 66=> 3| 67=> 4| 68=> 5| 69=> 6| 70=> 7|
Часть sum(map(int,sn))
означает: map(function,iterable)
применяет функцию int()
ко всем символам в sn
(строки являются итеративными), которые являются строкой вашего числа. Затем он sum()
получает его и называет себя с этой суммой.