Menu
Coddy logo textTech

Özyinelemeli Faktöriyel

Coddy'nin C++ Journey'sinin Mantık & Akış bölümünün bir parçası — ders 46 / 56.

Bir sayının faktöriyeli, özyinelemeyi (recursion) iş başında göstermek için mükemmel bir örnektir. n'in faktöriyeli (n! olarak yazılır), 1'den n'e kadar olan tüm pozitif tam sayıların çarpımıdır. Örneğin, 5! = 5 × 4 × 3 × 2 × 1 = 120.

Faktöriyeli özyineleme için ideal kılan şey, kendisi cinsinden tanımlanabilmesidir: n! = n × (n-1)!. Bu, 5! hesaplamak için 5'i 4! ile çarptığınız, 4! hesaplamak için ise 4'ü 3! ile çarptığınız anlamına gelir ve bu böyle devam eder.

İşte özyinelemeli bir faktöriyel fonksiyonunun görünümü:

int factorial(int n) {
    if (n <= 1) {           // Temel durum: 0! ve 1! değerlerinin her ikisi de 1'e eşittir
        return 1;
    }
    
    return n * factorial(n - 1);  // Özyinelemeli adım: n! = n × (n-1)!
}

Taban durum, n 1 veya 0'a ulaştığında özyinelemeyi durdurur ve 1 değerini döndürür. Özyinelemeli adım, mevcut sayıyı bir sonraki küçük sayının faktöriyeli ile çarpar. factorial(4) fonksiyonunu çağırdığınızda, taban duruma ulaşana kadar ardışık çağrılar yaparak 4 × 3 × 2 × 1 işlemini hesaplar, ardından çağrılar geri döndükçe tüm sonuçları birbiriyle çarpar.

challenge icon

Görev

Kolay

Özyinelemeli (recursive) bir faktöriyel fonksiyonu uygulayan ve bunu farklı girdi değerleri için faktöriyel hesaplamak üzere kullanan bir program oluşturun. Bu meydan okuma, bir fonksiyonun bir temel duruma ulaşana kadar değiştirilmiş parametrelerle kendisini çağırmasını sağlayarak özyinelemenin nasıl çalıştığına dair anlayışınızı test edecektir.

Aşağıdaki girdi sağlanacaktır:

  • Faktöriyeli hesaplanacak sayıyı temsil eden bir tam sayı n

Programınız şunları yapmalıdır:

  1. Bir tam sayı parametresi alan ve bir tam sayı döndüren factorial adında özyinelemeli bir fonksiyon oluşturun
  2. Fonksiyon temel durumu uygulamalıdır: eğer n 1'e eşit veya daha küçükse, 1 döndürün
  3. Fonksiyon özyinelemeli adımı uygulamalıdır: n değerini n-1'in faktöriyeli ile çarpılmış olarak döndürün
  4. Ana fonksiyonda, girdi değerini okuyun
  5. Girdi değeriyle factorial fonksiyonunu çağırın
  6. Sonucu belirtilen formatı kullanarak yazdırın

Aşağıdaki tam çıktı formatını kullanın:

Factorial of [n] is [result]

Faktöriyel fonksiyonunun her seferinde daha küçük bir değerle kendisini çağırması ve her özyinelemeli çağrıda temel duruma daha fazla yaklaşması gerektiğini unutmayın. Temel durum, n 1 veya 0'a ulaştığında durarak sonsuz özyinelemeyi önler. Özyinelemeli adım, mevcut sayıyı bir sonraki daha küçük sayının faktöriyeli ile çarpar ve fonksiyon çağrıları değerlerini döndürdükçe nihai sonucu oluşturur.

Kopya kağıdı

n'in faktöriyeli (n!), 1'den n'e kadar olan tüm pozitif tam sayıların çarpımıdır. Özyinelemeli (recursive) olarak şu şekilde tanımlanabilir: n! = n × (n-1)!

Özyinelemeli faktöriyel fonksiyonu:

int factorial(int n) {
    if (n <= 1) {           // Temel durum: 0! ve 1! değerlerinin her ikisi de 1'e eşittir
        return 1;
    }
    
    return n * factorial(n - 1);  // Özyinelemeli adım: n! = n × (n-1)!
}

Temel durum, n 1 veya 0'a ulaştığında özyinelemeyi durdurur. Özyinelemeli adım, mevcut sayıyı bir sonraki daha küçük sayının faktöriyeli ile çarpar.

Kendin dene

#include <iostream>
using namespace std;

// TODO: Faktöriyel fonksiyonunuzu buraya yazın

int main() {
    // Girdiyi oku
    int n;
    cin >> n;
    
    // TODO: Faktöriyel fonksiyonunu çağırın ve sonucu saklayın
    
    // Sonucu yazdır
    cout << "Factorial of " << n << " is " << result << endl;
    
    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler