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:

  1. Flytta N-1 diskar från posten A-post B
  2. Flytta N-1 diskar från post B bokföra C
  3. 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).

Se Steg
Relaterade Ämnen

Billigt sätt att spara ett pussel

jag tycker om att sätta ihop pussel och hänga dem upp för prydnadsändamål. Har du några alternativ när det gäller att visa en färdiga pussel. Det billigaste sättet är att bara klistra in den i en ram som håller det tätt, men inte limmade ihop. Med de...

Göra ett torn av Hanoi pussel spel

I detta korta projekt, kommer jag visa hur man bygger ett torn av Hanoi pusselspel använda trä som jag förvärvat från pallar. Spelet är enkelt att spela, och det gör en bra soffbord bit. För alla obekanta med spelet, här är korta instruktioner:-Målet...

UCube: Design & Skriv 3D objekt genom att bläddra växlar

detta instructable går igenom hur du designa och skriva ut en mängd 3D-modeller med ett system som kallas "UCube".Obs: Jag skulle älska att så småningom offentliggöra detaljerade instruktioner om hur du gör din egen UCube, men eftersom designen...

Använda QR-koder för att identifiera och spåra dina saker

vem flyttas hus vet vad en otäck sak som skulle kunna vara. Jag för närvarande outprocessing, vilket innebär massor av lådor och packning och andra typer av elände. En av mina problem är denna: Hur vet du om ett visst objekt är? Du har inte packat up...

Kod för att beställa filnamn ska passa

I detta Instructable lär du dig att snabbt beställa filer till en önskad sekvens. Vi kommer att göra detta genom utfyllnad numrerade filnamn med bokstäver så de sortera naturligt sortera i stegvis ordning. Stoppning / noll stoppning är en metod för a...

Hur du skriver skript för att göra en boll drag

jag använder programmet från Khan Academyhär är en länk till denhttp://www.khanacademy.org/CS/NewSteg 1: Steg 1 För att göra bakgrunden färg helt enkelt skriva background(0,0,0)den färg klickar du på en av nollor och du kan klicka på vilken färg du v...

Hur du använder Genome kod för att utforma

Specifika sekvenser av A, T, G, C nukleotider definiera många virus och alla levande organismer inklusive dig (se wikipedia om genen,genomet och DNA).Här är hur man får dem för din design. Exempelvis är detta en akryl laserskuret data för min Shoji a...

Bygga en öl Kegerator Tower kylare för att svalka din Kegerator torn kran och förhindra skummande öl

Det nummer ett klagomålet om någon direkt Rita kegerator är att öl kran & shanken få varm och din första 1/2 glas öl är alltid löddrig. Men lösningen är lätt - bara bygga och installera en öl tower kylare. Denna tower kylare fungerar genom att ständi...

Kodgenerator för anpassade Android/Arduino menyer att slå Arduino utgångar på och av. Android/Arduino för nybörjare. Absolut ingen programmering krävs

Uppdatering: användare frågade för undermeny support. pfodApp alltid stött sub-menyerna men jag har lagt undermenyer till pfodDesigner. Den instructable Design A Custom menysystemet visar hur du använder pfodDesigner för att bygga en meny med underme...

Bygga en rörlig och spårning Portal torn

Det är gulligt, det är artigt och det är verkligen dödliga. Det är ett torn från portalen. Det rör sig, har ljus, har ljud, och något att min tidigare Portal projektet inte hade: kameraspårningsinformation.Tornet är kontrollerat med en Arduino och en...

Ställa in en A100LK vindmätaren på en Arduino

Någon tänker installera en vindkraftgenerator, eller ens en hel flock av vindkraftverk, skulle göra klokt att övervaka den föreslagna platsen för minst ett helt år innan spendera ett öre mer på hårdvara. Detta är vad A100LK är utformad för.Det första...

AVR Assembler handledning 11

Välkommen till handledning 11!I den här korta guiden kommer vi slutligen att bygga den första delen av vårt sista projekt.Det första du bör göra är att gå till det allra sista steget i denna tutorial och titta på videon. Sedan komma tillbaka hit. [pa...

Hur man gör en artificiell intelligens

Börja med en dator som har tal- och även en text till tal-konverterare.Du kommer att behöva kunna skriva datorprogram som kan komma åt den taligenkänning och text till tal-omvandlaren.Några tillämpning utvecklingsverktyg och programmeringsspråk kan e...

Arduino: Enkla sekventiella LED

I detta instructable, vi kommer att bygga banan och skriva kod för att kontrollera tillståndet i tre LED sekventiellt med Arduino Uno styrelsen.Delar som behövs:Arduino UnoArduino programvara (kan hämtas gratis från Arduino)SkärbrädaTre lysdioder (va...

LED examen Hat

För alla dessa akademiker eller nästan akademiker som har antingen haft eller kommer att ha examen snart, Grattis!Min rumskompis just examen från Washington State University College av kläder Merchandising Design och textilier, med en examen i mode v...

Arduino interaktiv ljud Sensor

Vi kommer att lära hur man bygger en Arduino krets som tar input från någon form av analog sensor (vibrationsgivare, trycksensor, potentiometer) och använda den till utgång ljud från en piezo speaker. Detta gäller till exempel lär du dig att ansluta...

Hur man använder datorn registrerar - lektion 1 - bitars grunderna, maskering, logik verksamhet

dator register är svåra att använda, men värt att lära sig hur man använder. De ser ut som nummer, men fungerar som en serie av kryssrutor. Varje bit kan ha en annan funktion. Att sätta en 1 eller en check kommer att aktivera något. Ändra 1 till en 0...

Sällskapsdjur hälsa keeper (Intel IoT)

Detta projekt syftar till att ta hand om ditt husdjurs hälsa när du inte runt, PHK feeds ditt husdjur enligt den inställd på timern och övervaka hur det är att få matas, inklusive hur mycket vatten och foder det tar. Utnyttja kraften hos IP-kamera oc...

STM32F103 GPIO Input (med Keil och STMCubeMX)

I denna Tutorial kommer jag visa dig hur att få input från GPIO stift.Vi tar input från den blå knappen på vår STM32 styrelse att byta lampan på samma styrelse.Denna handledning är uppdelad i tre steg:Steg 1: Skapa projekt i STM32CubeMXSteg 2: Skriva...