Как вы думаете, как лучше написать этот метод для вычисления значения ackermann ?Эта функция включает в себя несколько «коротких путей» к простейшему методу вычисления значения, которое значительно ускоряет вычисление за счет уменьшения количества рекурсивных вызовов, но в итоге вы получаете длинное выражение.
В версиях используются:
- Символ продолжения строки \
- Вложенные в скобках функции
- Один внешний набор скобок
Какая версия кажется вам лучше?Зачем?Мне любопытно.
>>> def ack4(M, N):
return (N + 1) if M == 0 else \
(N + 2) if M == 1 else \
(2*N + 3) if M == 2 else \
(8*(2**N - 1) + 5) if M == 3 else \
ack4(M-1, 1) if N == 0 else \
ack4(M-1, ack4(M, N-1))
>>> def ack2(M, N):
return (N + 1) if M == 0 else (
(N + 2) if M == 1 else (
(2*N + 3) if M == 2 else (
(8*(2**N - 1) + 5) if M == 3 else (
ack2(M-1, 1) if N == 0 else
ack2(M-1, ack2(M, N-1))))))
>>> def ack3(M, N):
return ((N + 1) if M == 0 else
(N + 2) if M == 1 else
(2*N + 3) if M == 2 else
(8*(2**N - 1) + 5) if M == 3 else
ack3(M-1, 1) if N == 0 else
ack3(M-1, ack3(M, N-1)))
>>> ack2(4, 2) == ack3(4, 2) == ack4(4, 2)
True
>>>