Я пытаюсь рекурсивно реализовать алгоритм Капрекара следующим образом:
def soustraction_de_Kaprekar(N):
s = str(N)
l = list(set(s))
l.sort()
r1 = l.copy()
l.reverse()
r2 = l
r1 = int(''.join(r1))
r2 = int(''.join(r2))
return max(r1,r2)-min(r1,r2)
def Kaprekar(N, kaplist = None):
if kaplist == None:
kaplist = []
kaplist.append(N)
if N == 6174:
return kaplist
else:
N = soustraction_de_Kaprekar(N)
#print(type(N), N)
kaplist.append(N)
return kaprekar(N, kaplist)
Составление первой функции:
print(soustraction_de_Kaprekar(2143))
print(soustraction_de_Kaprekar(soustraction_de_Kaprekar(2143)))
print(soustraction_de_Kaprekar(soustraction_de_Kaprekar(soustraction_de_Kaprekar(2143))))
дает константу Капрекара:
3087
8352
6174
Что-то пошло не так с рекурсивной функцией при попытке сохранить промежуточный номер в списке:
Kaprekar(2143)
дает
8352
[2143, 3087, 8352]
6174
[8352, 6174]
Спасибо