Commodore sayı 10, sayfa 22
Sayfanın metni

Sayfa 22

FRMEVL o ana kadarki bulduğu değeri yığına atar ve sağ taraftaki argümanı hesaplaması için kendi kendini çağırır. Gelen sonuçla yığından geri aldığı ilk sonuç arasında daha düşük öncelikli işlemi yapar. Böylece şunlar sağlanır: Satır soldan sağa işlenir. (Zaten başka türlü bir çözüm saçma ve karışık olurdu.) Ayrıca dilendiği kadar işlem belirli öncelik sırasıyla oluşturulur ve gerçekten hatasız olarak bu sırada işlenmesi gerçekleşir. * Grafik ekranında bir resmimiz olsun. Boş olan bir bölümünü boya döker gibi doldurmak istiyoruz. Ne yapmalıyız? ÇÖZÜM: Burada gene RECURSI-ON imdadımıza yetişiyor. Bir altprogram yazarız. Yaptığı iş belli bir koordinatta çevresine bakar ve uygun yerleri doldurarak yoluna devam eder, şayet herhangi bir yerde yolu birkaç ihtimale çıkarsa o koordinatı yığına atar, ihtimallerden birini seçer, kendi kendini çağırarak o yönde doldurma işleminin devamını sağlar. Böyle bir grafik programının çalışmasını gördüyseniz bu özelliği de görmüşsünüzdür. İhtimaller birçok yerde dallanır budaklanır, program ise ihtimalfasında bir ışık yakmış ve ufkunu genişletmiş olmasıdır. Başta da dediğim gibi, konuya sakin bir şekilde paniğe kapılmadan yaklaşılırsa gerçekten de çözüm bulunabiliyor. Ben şimdi bu örneklere bir dördüncüsünü ekleyeceğim. Fakat bu örnek, diğer örnekler gibi kalmayacak. Bu örneği aynı zamanda hayata kavuşturacağız. Heyecanlanan genç programcı arkadaşlar isterlerse burada kısa bir ara verip, zihinlerini toplayıp tekrar yazının başına oturabilirler. Örneğimiz fare ve labirentle yapılan denemeler üzerine. Yalnız bizim faremiz koku alamıyor. Yollara girip çıkıp deneme-yanılma yöntemiyle yolu bulacak. Fakat daha evvel girdiği yollara bir daha girmeyecek. Yoksa bir bölgenin etrafında dönüp durmasını kimse engelleyemez. İsterseniz fareyi bir kenara bırakıp, olaya daha sade bakalım. Olay bazı gazetelerin bulmaca köşelerinde ver-

PROBLEMİN ÇöZüMü

GEÇEN ZAMAN <SAAT,DAK BAŞLANGIÇ ŞEKLİ

Ok *S * * * * 4 * * * * * * * OKKA O kak

İKA,SANIYE):

ÇÖZÜLMÜŞ ŞEKLİ

*SCCCCCCCCC 4 *CCCCECCECC* * lerden birini seçerek yoluna devam eder. O anlık öteki ihtimali (veya ihtimalleri) bırakır. Fakat eninde sonunda o noktaya geri döner ve işini kusursuz olarak bitirir. Programın bunca fazla ihtimale karşı yapacağı işi unutmamasını kullanılmasıdır. Umudumuz yukarıdaki üç örneğin birçok bilgisayar programcısının kadikleri problemler gibi bir labirent içinde bir noktadan başka bir noktaya gitme olayından başka bir şey değil. Çalışmamızı öncelikle programın yalnızca rekursif altprogram bölümü üzerinde yoğunlaştıralım. Geri kalan iş süsleme, ekran hazırlama tipinde olacağı için onları ayrı tutalım. Onları nasıl olsa yaparız. Bizi esas uğraştıracak olan rekursif altprogramın dizaynıdır. Şimdi programımızı kaba hatlarından başlayıp ince detaylara doğru adım adım gerçekleştirelim. Programımız rekursif olacak. Peki ne zaman kendi kendini çağıracak? Tabii ki yol birkaç ihtimalli olduğunda koordinatları yığında saklayıp ihtimallerden birini seçip o yönde işi min devam etmesi için kendi kendir çağıracak. Bundan başka altprogramımızın düz yolları kendi başına halletmesi ayrıca tercih edilen bir unsur. Peki... Yol tıkanınca ne olacak? Bu sorunun cevabı da oldukça basit: Yolun tıkanması kaçınılmaz bir olay. Yol tıkanınca yeni ihtimaller denenmeli. Yani yolun tıkandığı bir üst seviyedeki programa bildirilmeli ve yeni bir ihtimali seçmesi sağlanmalı. Zaten altprogramın işlemesi birkaç derinlikten sonra ele alındığında bir altprogramın bildirebileceği olaylar iki ihtimallidir. Bunlar “yol ve

Klavyeyle gezinmek için ← ve → tuşları.