Skriva kod för att lösa pussel torn av Hanoi (2 / 4 steg)
Steg 2: Kod rekursiva mönstret
För att lösa för N diskar, måste vi kunna lösa för N-1 diskar. Det är där rekursion kommer in. Som en del av denna plan vill du skriva kod som gäller för olika antal diskar för pussel, samt olika start- och destination inlägg.
Pseudo koden för det ser ut:
Lösa N-1 diskar, men flytta dem från post A bokföra B.
Flytta den största disken (disk N) från post A till post C.
Lösa för N-1 diskarna igen och flytta dem från post B bokföra C.
Jag som särskilt avses post A, post B och bokföra C ovan, men koden måste generaliseras eftersom beroende på disken, start post och destination inlägg kommer att vara annorlunda. Om du tänker på det, vi lösa pusslet 3 gånger:
- Flytta N-1 diskar från posten A-post B
- Flytta N-1 diskar från post B bokföra C
- Flytta N diskar från posten A-post C
Så behöver du en generaliserad program som låter dig berätta det vilka start- och destination inlägg är. Det är intressanta att du inte riktigt skriver en massa kod, som är en stor del av överklagandet av rekursion. Du beskriver helt enkelt i programmet hur att bryta en uträkning i mindre bitar, och datorn gör resten.
Detaljerad pseudo koden ser ut så:
Om den disk som du flyttar är den minsta,
sedan flytta den från start post till destination post.
Annars...
Starta igen på toppen av denna kod med en ny uppsättning ingångar:
Använd en mindre disk.
Använd samma start inlägget.
Använda Anhalt som destination post.
Flytta den största disken från start post till destination post.
Starta igen på toppen av denna kod med en ny uppsättning ingångar:
Använd en mindre disk.
Använda Anhalt som start inlägget.
Använd samma destination tjänst.
Här är hur JavaScript-koden ser ut:
funktion solve_tower_of_hanoi (disk, start, destination, mellanstationer) {
om (disk == 1) {
basera fall av 1 disk, vi vet hur man löser det
Document.write ("Flytta bricka 1 från inlägget" + start + "till post" + mål +
". < br / >");
} annat {
först lösa för alla utom den sista disken
solve_tower_of_hanoi (disk - 1, start, staging, destination);
nu flytta den sista disken
Document.write ("Flytta bricka" + bricka + "från post" + start + "till post" +
destination + ". < br / >");
nu lösa för de återstående diskarna
solve_tower_of_hanoi (disk - 1, staging, destination, start);
}
}
Om inte du är en programmerare, låt mig förklara att koden ovan är insvept i en "funktion" som du kan köra samma kod med olika ingångar. Du kan nu berätta hur många hårddiskar du har i din pussel, för programmet och vilka inlägg är start, mål och mellanstationer. Funktionen är också grunden för att kunna köra rekursion, i vilket samma kod körs igen och igen men med olika ingångar (ingångar är även känd som "parametrar" eller "argument" i programmering lingo).