Ö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.
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:
- Bir tam sayı parametresi alan ve bir tam sayı döndüren
factorialadında özyinelemeli bir fonksiyon oluşturun - Fonksiyon temel durumu uygulamalıdır: eğer
n1'e eşit veya daha küçükse, 1 döndürün - Fonksiyon özyinelemeli adımı uygulamalıdır:
ndeğerinin-1'in faktöriyeli ile çarpılmış olarak döndürün - Ana fonksiyonda, girdi değerini okuyun
- Girdi değeriyle factorial fonksiyonunu çağırın
- 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;
}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
1İşaretçiler ve Bellek
İşaretçi Nedir?Adres OperatörüDereference OperatörüNull İşaretçilerİşaretçiler ve Diziler'new' ile Dinamik Bellek'delete' ile Belleği Serbest BırakmaÖzet - İşaretçi Pratiği4Map'ler (Anahtar-Değer Çiftleri)
std::map'e GirişBir Map OluşturmaDeğerlere Erişme ve DeğiştirmeAnahtar KontrolüÇiftleri KaldırmaMap Üzerinde YinelemeÖzet - Kelime Frekansı7İleri Seviye Fonksiyonlar
Referans ile GeçmeLambda İfadelerine GirişParametreli LambdalarDönüş Değeri Olan LambdalarÖzyinelemeye GirişÖzyinelemeli FaktöriyelLambda ile Sıralama2Vektörler (Dinamik Diziler)
std::vector'a GirişBir Vektör OluşturmaEleman EklemeElemanlara ErişmeVektör BoyutuFor Döngüsü ile YinelemeAralık Tabanlı For DöngüsüEleman SilmeÖzet - Vektör İşlemleri3Proje: Görev Listesi Aracı
Projeye Genel BakışGörev Ekleme