Yineleme ve yineleme
Yinelemeyi anlamak için yinelemeyi anlamanız gerekir...
Programlamada
yineleme
döngüsel bir veri işleme sürecinin
bir adımı.
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:
\(\begin{equation*} n!= \begin{cases} 1 &\text{n <= 1,}\\ (n-1)! \cdot n &\text{n > 1.} \end{durumlar} \end{denklem*}\)
Bu açıklamanın özyinelemeli bir işlevden başka bir şey olmadığını fark edebilirsiniz.
Burada ilk satır (
\(n <= 1\)) temel durumdur (yineleme sonlandırma koşulu) ve ikinci satır bir sonraki adıma geçiştir. < br />
Yinelemeli faktöriyel fonksiyon |
Yinelemeli algoritma |
statik int Faktöriyel(int n){
eğer (n > 1)
dönüş n * Faktöriyel(n - 1);
aksi takdirde 1 döndürür;
}
|
int x = 1;
için (int i = 2; i <= n; i++)
x = x * ben;
Console.WriteLine("%d", x);
|
İş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.
Problem
Belirli bir doğal sayıdaki basamak sayısını
n
olarak
döndüren bir
K(n)
işlevi tanımlayın
\(\begin{equation*} K(n) = \begin{cases} 1 &\text{if n < 10}\\ K(n / 10) + 1 &\text{if n >= 10} \end{durumlar} \end{equation*}\).
Yukarıdaki oranı kullanarak
n
doğal sayısında basamak sayısını hesaplayan yinelemeli bir işlev yazın.
Запрещенные операторы: for;while;until