Ö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 bir faktöriyel işlevi uygulayan ve bunu farklı girdi değerlerinin faktöriyellerini hesaplamak için kullanan bir program oluştur. Bu görev, bir işlevin temel duruma ulaşana kadar değiştirilmiş parametrelerle kendisini çağırmasını sağlayarak özyinelemenin nasıl çalıştığına ilişkin anlayışını sınayacak.
Aşağıdaki girdi sağlanacaktır:
- Faktöriyeli hesaplanacak sayıyı temsil eden bir tamsayı
n
Programın şunları yapması gerekir:
- Bir tamsayı parametresi alan ve bir tamsayı döndüren
factorialadlı özyinelemeli bir işlev oluştur - İşlev, temel durumu uygulamalıdır:
n1'den küçük veya eşitse 1 döndür - İşlev, özyinelemeli adımı uygulamalıdır:
nilen-1'in faktöriyelini çarpıp döndür - Ana işlevde girdi değerini oku
- Girdi değeriyle factorial işlevini çağır
- Sonucu belirtilen biçimi kullanarak yazdır
Aşağıdaki tam çıktı biçimini kullan:
Factorial of [n] is [result]factorial işlevinin her seferinde daha küçük bir değerle kendisini çağırması ve her özyinelemeli çağrıyla temel duruma yaklaşması gerektiğini unutma. Temel durum, n 1'e veya 0'a ulaştığında durarak sonsuz özyinelemeyi önler. Özyinelemeli adım, işlev çağrıları değerlerini döndürürken son sonucu oluşturarak mevcut sayıyı bir sonraki küçük sayının faktöriyeliyle ç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 EklemeKendi başına pratik yap: Online C++ derleyicisi