Pracuję na swój sposób w książce o obliczeniach (Minksy 1967) i mam trudność z powiązaniem funkcji rekursywnej z funkcją zdefiniowaną w kategoriach pętli. W szczególności pyta znalezienie relacji między dwie funkcje:Funkcja Ackermanna kontra n zagnieżdżonych pętli
funkcyjnych Ackermann (cały kod w pytona):
def a(n,m):
if n==0:
return m+1
if m==0:
return a(n-1,1)
return a(n-1,a(n,m-1))
i funkcję, który oblicza się z n zagnieżdżonej pętli:
def p(n,m):
for i_1 in range(m):
for i_2 in range(m):
...
for i_n in range(m):
m+=1
A rekursywny sposób zapisu tego (z jedną pętlą) to:
def p(n,m):
if n==0:
return m+1
for i in range(m):
m=p(n-1,m)
return m
Lub w pełni powtarza Sposób pisania byłoby:
def p(n,m):
return P(n,m,m)
def P(n,k,m):
if n==0:
return m+1
if k==1:
return P(n-1,m,m)
m=P(n,k-1,m)
return P(n-1,m,m)
Czy istnieje prosty sposób na powiązanie tych dwóch funkcji? Czuję się jakbym się czołgał we mgle - wszelka wiedza, którą mógłbyś mi przekazać, aby podejść do tego rodzaju problemów, byłaby bardzo doceniona. Czy istnieje sposób na wdrożenie funkcji pętli w pełni rekurencyjnej bez wprowadzenia trzeciego parametru? Dzięki.
W pierwszym fragmencie kodu masz dwa następujące po sobie "return" - literówka? – eumiro
@eumiro, drugi zwrot to przypadek, gdy m! = 0 i n! = 0 –
@Paul, OK, dzięki, poprawiłem wcięcie kodu. – eumiro