4 svar
154 visningar
Johanspeed behöver inte mer hjälp
Johanspeed 226
Postad: 19 sep 2019 15:56

Rekursion

Jag försöker få en bättre förståelse för funktioner som anropar sig själva. Nedan är exempelkod som löser problemet towers of Hanoi https://en.wikipedia.org/wiki/Tower_of_Hanoi

Här är exempelkoden länkad i python visualise:

http://www.pythontutor.com/visualize.html#code=def%20moves%28n,%20left%29%3A%0A%20%20%20%20if%20n%3D%3D0%3A%20return%0A%20%20%20%20moves%28n-1,%20not%20left%29%0A%20%20%20%20if%20left%3A%0A%20%20%20%20%20%20%20%20print%28str%28n%29%20%2B%20'%20left'%29%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20print%28str%28n%29%2B'%20right'%29%0A%20%20%20%20moves%28n-1,%20not%20left%29%0A%0A%0Amoves%285,%20True%29%20%20%20%20&cumulative=false&curInstr=0&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false 

Jag förstår inte steg 20-21 när programmet verkar skippar rad 3 och fortsätter vidare till den andra if - satsen. Någon som har någon bra förklaring på hur python tänker i det här läget?

Laguna Online 30219
Postad: 19 sep 2019 16:03

Det ser ut som att n har blivit 0, och ett anrop har därmed returnerat. Det returnerar till raden efter där det gjordes, så det är det som ser ut som ett hopp i koden.

Johanspeed 226
Postad: 19 sep 2019 16:43
Laguna skrev:

Det ser ut som att n har blivit 0, och ett anrop har därmed returnerat. Det returnerar till raden efter där det gjordes, så det är det som ser ut som ett hopp i koden.

Jag förstår att moves(n, left) returnerar None när n=0. Menar du att python returnerar None till raden med moves(n-1, not left), varför i såna fall?

Laguna Online 30219
Postad: 19 sep 2019 17:55
Johanspeed skrev:
Laguna skrev:

Det ser ut som att n har blivit 0, och ett anrop har därmed returnerat. Det returnerar till raden efter där det gjordes, så det är det som ser ut som ett hopp i koden.

Jag förstår att moves(n, left) returnerar None när n=0. Menar du att python returnerar None till raden med moves(n-1, not left), varför i såna fall?

När ett funktionsanrop returnerar så returnerar det till den punkt där anropet gjordes. Vart skulle det annars ta vägen?

Johanspeed 226
Postad: 19 sep 2019 19:36
Laguna skrev:
Johanspeed skrev:
Laguna skrev:

Det ser ut som att n har blivit 0, och ett anrop har därmed returnerat. Det returnerar till raden efter där det gjordes, så det är det som ser ut som ett hopp i koden.

Jag förstår att moves(n, left) returnerar None när n=0. Menar du att python returnerar None till raden med moves(n-1, not left), varför i såna fall?

När ett funktionsanrop returnerar så returnerar det till den punkt där anropet gjordes. Vart skulle det annars ta vägen?

Förstår nu, tack!

Svara
Close