Module: alt programlar. özyineleme


Problem

5/12

Özyineleme ve yineleme

Theory Click to read/hide

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 />  
İş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.

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);
1
using System;   
2
class Program   
3
{    
4
    static int countDigits(int n)   
5
    {   
6
7
8
9
10
        return 1 + countDigits(n / 10);   
11
    }   
12
    static void Main()   
13
    {   
14
        int n = Convert.ToInt32(Console.ReadLine());   
15
        Console.WriteLine(countDigits(n));   
16
    }   
17
}   

     

Program check result

To check the solution of the problem, you need to register or log in!