Bir prosedür veya işlev, içindeki başka bir prosedüre çağrı içerebilir. Dahil olmak üzere, alt program kendisini arayabilir. Bu durumda, bilgisayar umursamıyor. Ayrıca, her zaman olduğu gibi, yukarıdan aşağıya tanıştığı komutları tutarlı bir şekilde yürütür.

Matematiği hatırlarsanız, orada matematiksel tümevarım ilkesi ile tanışabilirsiniz. Aşağıdaki gibidir:

Belirli bir ifade her doğal n için doğrudur, eğer
    1. n = 1 ve
için geçerlidir     2. Herhangi bir keyfi doğal n = k için önermenin geçerliliğinden, n = k+1 için doğru olduğu sonucu çıkar.

Programlamada bu tekniğe özyineleme
denir
Yineleme, verilen basit temel durumlara dayalı olarak, bir nesne kümesini kümenin kendisi açısından tanımlamanın bir yoludur.


Tekrarlı kendini doğrudan veya diğer prosedürler ve işlevler aracılığıyla çağıran bir prosedür (işlev) olarak da adlandırılır
Özyinelemeli bir prosedür örneği:
prosedür Rec(a: tamsayı);
başlamak
    eğer bir > 0 o zaman
        Tavsiye(a - 1);
    yaz(a);
bitiş;
Şematik olarak, özyineleme işi bir akış şemasıyla temsil edilebilir.

 
Rec() prosedür parametre 3 ile yürütülür. Ardından, parametre 3 ile prosedür içinde, parametre 2 ile prosedür çağrılır ve parametre 0 ile prosedür çağrılana kadar böyle devam eder. 0 parametresi çağrıldığında, özyinelemeli çağrı zaten gerçekleşmeyecek ve 0 parametresiyle yapılan prosedür 0 sayısını yazdıracak ve sonlandırılacaktır. Daha sonra kontrol 1 parametresi ile prosedüre geri aktarılır, o da 1 sayısını yazdırarak işini bitirir ve bu böyle devam eder. parametre 3 ile prosedürden önce. 

Çağrılan tüm prosedürler, işlerini tamamlayana kadar hafızada saklanır. Eşzamanlı prosedürlerin sayısı tekrarlama derinliği olarak adlandırılır.

Özyinelemenin, bir alt programda içerilen talimatların tekrar tekrar yürütülmesi olduğunu gördük. Ve bu da döngünün çalışmasına benzer. Döngü yapısının hiç bulunmadığı programlama dilleri vardır, örneğin Prolog. 
For döngüsünün işleyişini simüle etmeye çalışalım. 
For döngüsü bir adım sayacı değişkeni içerir. Özyinelemeli bir alt programda, böyle bir değişken parametre olarak iletilebilir.
//LoopImitation() iki parametreli prosedür
//İlk parametre – adım sayacı, ikinci parametre – toplam adım sayısı
prosedür LoopImitation(i, n: tamsayı);
başlamak
    writeln('Merhaba N ', i); // i'nin herhangi bir değeri için tekrarlanacak operatör
    eğer ben n sonra //Döngü sayacı n değerine eşit olana kadar,
        Döngü Taklidi(i + 1, n); //i+1 parametresiyle prosedürün yeni bir örneğini çağırın (bir sonraki i değerine geçiş)
son; 

Yinelemeyi anlamak için yinelemeyi anlamanız gerekir...
 
Yineleme programlamada — geniş anlamda — eylemlerin kendilerine çağrılara yol açmadan birçok kez tekrarlandığı veri işleme organizasyonu (%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F'den farklı olarak) title="Tekrarlama" >Yinelemeler). Dar anlamda — tek adımlı döngüsel veri işleme süreci. 
Genellikle geçerli adımdaki (yineleme) yinelemeli algoritmalar, önceki adımlarda hesaplanan aynı işlemin veya eylemin sonucunu kullanır.  Bu tür hesaplamalara bir örnek, yineleme ilişkilerinin hesaplanmasıdır. 
Özyinelemeli değerin basit bir örneği faktöriyeldir: \(N!=1 \cdot 2 \cdot 3 \cdot \ ... \\cdot N\) Her adımda (yineleme) değerin hesaplanması şu şekildedir: \(N=N \cdot i\)\(N\) değerini hesaplarken, önceden depolanmış değeri \(N\) alırız >.

Bir sayının faktöriyeli yinelenen formül kullanılarak da açıklanabilir:



Bu açıklamanın özyinelemeli bir işlevden başka bir şey olmadığını fark edebilirsiniz.
İşte ilk satır (\(n <= 1\)) — bu temel durumdur (yinelemenin bitiş koşulu) ve ikinci satır bir sonraki adıma geçiştir. 
 
İşlev çağrılarının bazı ek yük içerdiği anlaşılmalıdır, bu nedenle özyinelemeli olmayan bir faktöriyel hesaplaması biraz daha hızlı olacaktır. 
Sonuç:
Basit bir yinelemeli algoritmaya sahip, yinelemesiz bir program yazabileceğiniz yerde, yinelemesiz yazmanız gerekir. Ancak yine de, hesaplama sürecinin yalnızca özyineleme ile uygulandığı geniş bir problem sınıfı vardır.
Öte yandan, özyinelemeli algoritmalar genellikle daha anlaşılırdır.
 

Özyinelemeli faktöriyel işlevi şuna benzer Faktöriyeli bulmak için algoritmayı olağan, yinelemesiz şekilde karşılaştırın
işlev Faktöriyel(n: tamsayı): tamsayı;
başla
    eğer n > 1 o zaman
        Faktöriyel := n * Faktöriyel(n - 1)
    başka
        Faktöriyel := 1;
bitiş;
x := 1;
for i := 2 to n do
    x := x * ben;
writeln(x);