SORU
3 AĞUSTOS 2009, PAZARTESİ


Hanoi Kulesi: Özyinelemeli Algoritma

Bir Bilgisayar mühendisliği öğrencisi olduğumu ve bu sorun her ne özyineleme anlayış var. Ancak, sorun Hanoi Kulesi için özyinelemeli çözüm başımı sarmak için görünmüyor olabilir. Burada Wikipedia: kodu

procedure Hanoi(n: integer; source, dest, by: char);
Begin
    if (n=1) then
        writeln('Move the plate from ', source, ' to ', dest)
    else begin
        Hanoi(n-1, source, by, dest);
        writeln('Move the plate from ', source, ' to ', dest);
        Hanoi(n-1, by, dest, source);
    end;
End;

Tek bir disk hareket edebiliyoruz kadar temel durum ve küçük parçalara sorunu kırma kavramı anlıyorum. Ancak, temel olmayan durumda iki özyinelemeli çağrıları birlikte nasıl çalıştığını çözemedim. Belki biri bana yardım edebilir mi? Teşekkürler.

CEVAP
3 AĞUSTOS 2009, PAZARTESİ


Aslında, section from where you took that code bir açıklama sunuyor:

Peg peg C A n diskleri taşımak için:

  1. n−1 B. Bu diskleri yaprakları hareket disk #Bir tahta üzerinde n yalnız
  2. disk hareket #A n C için
  3. disk üzerinde oturuyorlar yani C için n−1 disk B hareket #n

İlk kaldırmak zorunda olduğu çok açıkn− 1 ulaşmak için disklernth bir. Ve onları taşımak için başka bir peg için ilk görünmesi için tam kule istediğiniz daha.

Sonrası kod üç bağımsız disklerin sayısı ayrıca vardır: Birkaynakpeg, birhedefpeg ve birgeçici(burada boyutu ile her disk arasında saklı olabilir hangi peg ^em>n− 1 uyar).

Özyineleme aslında iki kez, bir kez sonra *2,* Daha önce bir kere olur. writeln önce bir hareket olacaktırn− 1 geçici peg üzerine, geçici depolama (özyinelemeli çağrı argümanlar farklı sırayla) olarak hedef peg kullanarak diskleri. Bundan sonra, geri kalan diskin hedef peg taşınır ve daha sonra ikinci özyineleme taşıyarak tüm kule, hareketli compeltesn− 1 Hedef peg, yukarıdaki disk temp peg kulen.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010
  • TWiT Netcast Network

    TWiT Netcast

    27 EKİM 2005