Bir özyinelemeli arama nedir?

Programlamada özyinelemeli çağrı, programa aynı alt yordamı tekrar çalıştırmasını söyleyen bir alt yordamdaki veya işlevdeki bir komuttur. Tekrarlama performansı, fonksiyonun doğrudan sonucu olabilir veya sırayla ilk fonksiyona karşılık gelen ikinci bir fonksiyon tetiklenebilir. Bir özyinelemeli çağrı, korkunç sonsuz döngüye bazı benzerliklere sahiptir, ancak alt yordam her zaman programa özyinelemeyi yinelemeyi ne zaman durduracağını söyleyen koşullu bir ifadeye sahiptir.

Özyineleme kavramı belki de bir örnek kullanılarak en iyi şekilde gösterilebilir. Bir çatı ustasının eve yeni zona uyguladığını varsayalım. Başlamak için, çatıya bir zona paketi taşımak zorunda. İlk paketi yerine çiviledikten sonra, merdiveni tırmanmalı, başka bir paketi almalı ve yerine oturtmalıdır. İşlem, son zona uygulanana kadar bir dizi "git, al, geri dön" olarak devam eder. Bu noktada, çatı ustası bir sonraki işe geçmekte ya da eve gitmekte özgürdür.

Örnek aşırı basitleştirme olmasına rağmen, özyinelemeli bir çağrının tüm öğelerini içerir. Bir başlangıç ​​noktası var, çatı ustası ihtiyaç duyduğu şeyi almalı, başlangıcına geri dönmeli ve son koşul gerçekleştiğinde durmalıdır. Temel olarak programın yaptığı bu; başlar, bir eylem gerçekleştirir, kendisine döner ve bitiş koşulu gerçekleştiğinde sona erer.

Bitiş durumu, temel durum olarak adlandırılır. Tüm özyinelemeli aramalar için esastır; onsuz, fonksiyon tekrarlanmaya devam ederdi. En iyi ihtimalle, bu, sistemin hafıza kaynaklarını boşaltmakla sonuçlanır. Normalde aşırı yüklenme bir noktada programın çökmesine neden olur, ancak sorunun keşfedilmesiyle birlikte önemli bir hasar meydana gelebilir.

Deneyimli programcılar özyinelemeli bir arama ile "for" veya "while" döngüsü arasındaki benzerliği fark edebilir. Örneğin, amaç 999'dan daha büyük parça numaralarına sahip tüm stokların toplam envanter sayımını bulmaksa, "for" döngüsü programa tüm uygun örnekleri bulmasını ve bir "while" döngüsü programa döngüyü çalıştırmasını bildirir. sadece belirtilen şart geçerliyse. Bir özyinelemeli çağrı bu döngülerin bazı özelliklerini "if-then-else" ifadesiyle birleştirdiği söylenebilir; eğer bu koşul doğruysa, o zaman bunu yapın veya koşul yanlışsa başka bir şey yapın. Bununla birlikte, özyineleme tipik olarak daha kompakt bir kod sağlar ve problemin ihtiyaç duyduğu noktaya yakın bir fonksiyona aktarılmasına izin verir.