Aracılığıyla paylaş


Özyinelemeli Yordamlar (Visual Basic)

Özyinelemeli prosedür, kendini çağıran bir prosedürdür. Genel olarak, Visual Basic kodu yazmanın en etkili yolu bu değildir.

Aşağıdaki prosedür, orijinal argümanının faktöriyelini hesaplamak için özyinelemeyi 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. Koşulsuz kesinlikle karşılanabilecek en az bir koşul olmadan, işleminiz sonsuz bir döngüye girme riski taşır.

Bellek Kullanımı. Uygulamanızın yerel değişkenler için sınırlı miktarda alanı var. Bir prosedür kendini çağırdığında, yerel değişkenlerinin ek kopyaları için bu alandan daha fazla 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 parametreleri aktarma, ek depolamanın başlatılması 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 prosedür özyinelemeli olarak kendisini çağırdığında, bağımsız değişken listesi olmasa bile prosedür adından parantez eklemeniz 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ı nedeniyle bellek yetersizliği yaşamadığınızdan emin olun.

Ayrıca bakınız