Я работаю над программой, заданной a и b, вычисляет последние 5 цифр a^b. В настоящее время я работаю до тех пор, пока b достаточно низкий, но если b велико (> 1000), это сокрушит стек. Есть ли способ сделать это итеративной функцией? Я попытался преобразовать в итеративный, но я не могу понять это.Рекурсия хвоста в петлю
def pow_mod(a,b):
if b == 0:
return 1
elif b == 2:
return a*a % 10000
return ((b%2*(a-1) + 1) * pow_mod(a,b//2)**2) % 10000
Ваш код не делает хвостовую рекурсию, потому что он умножает значение рекурсивного вызова. – Barmar
Рекурсия хвоста будет выглядеть как 'return pow_mod (...)', а не 'return something * pow_mod (...)' – Barmar
Не важно, потому что Python не выполняет оптимизацию хвостовой рекурсии. – Barmar