Özyinelemeli Yordamlar (Visual Basic)
Özyinelemeli yordam, kendisini çağıran yordamdır. Genel olarak, Visual Basic kodu yazmanın en etkili yolu bu değildir.
Aşağıdaki yordam özgün bağımsız değişkeninin faktöriyelini hesaplamak için özyineleme kullanır.
Function Factorial(n As Integer) As Integer
If n <= 1 Then
Return 1
End If
Return Factorial(n - 1) * n
End Function
Özyinelemeli Yordamlarla İlgili Dikkat Edilmesi Gerekenler
Sınırlama Koşulları. Özyineleni sonlandırabilecek en az bir koşulu test etmek için özyinelemeli bir yordam tasarlamanız ve makul sayıda özyinelemeli çağrıda böyle bir koşulun karşılanmamış olması durumunu da işlemeniz gerekir. Başarısız olmadan karşılanabilir en az bir koşul olmadan, yordamınız sonsuz bir döngüde yürütme riski yüksektir.
Bellek Kullanımı. Uygulamanızın yerel değişkenler için sınırlı miktarda alanı var. Bir yordam kendisini her çağırışında, yerel değişkenlerinin ek kopyaları için bu alandan daha fazlasını kullanır. Bu işlem süresiz olarak devam ederse, sonunda bir StackOverflowException hataya neden olur.
Verimlilik. Özyineleme yerine neredeyse her zaman bir döngü kullanabilirsiniz. Döngüde bağımsız değişkenleri geçirme, ek depolamayı başlatma ve değerleri döndürme yükü yoktur. Özyinelemeli çağrılar olmadan performansınız çok daha iyi olabilir.
Karşılıklı Özyineleme. İki yordam birbirini çağırırsa çok düşük performans, hatta sonsuz bir döngü gözlemleyebilirsiniz. Böyle bir tasarım, tek bir özyinelemeli yordamla aynı sorunları sunar, ancak algılamak ve hata ayıklamak daha zor olabilir.
Parantezler ile arama. Bir Function
yordam özyinelemeli olarak kendisini çağırdığında, bağımsız değişken listesi olmasa bile yordam adını parantez içinde izlemeniz gerekir. Aksi takdirde işlev adı işlevin dönüş değerini temsil eden şekilde alınır.
Test Etme. Özyinelemeli bir yordam yazarsanız, her zaman bazı sınırlayıcı koşulları karşıladığından emin olmak için çok dikkatli bir şekilde test etmelisiniz. Ayrıca çok fazla özyinelemeli çağrı olması nedeniyle belleğin yetersiz olduğundan da emin olmanız gerekir.