Bir faktöriyelin manuel olarak hesaplanması kolaydır, ancak bunu mümkün olan en temiz şekilde programlı olarak nasıl yaparsınız?
Bir sayının faktöriyeli önemli bir matematiksel kavramdır. Permütasyonlar ve kombinasyonlar yapmak, üstel ve logaritmik ifadeler yazmak ve olasılığı hesaplamak için kullanabilirsiniz.
Bir oturma düzeni tasarlamanın veya Maldivler tatiliniz için tişört seçmenin farklı yollarını bulmak için kullanırsınız. Ancak bir sayının faktöriyelini nasıl hesaplayabilirsiniz?
Bir Sayının Faktöriyel Nedir?
Pozitif bir sayının faktöriyeli, sayının kendi değerinden küçük veya ona eşit tüm pozitif tam sayıların çarpımıdır. Bir sayının ardından ünlem işareti(!) gelen bir sayı, bir sayının faktöriyelini belirtir. Beşin faktöriyelini 5 olarak temsil ediyorsunuz! ve şu şekilde hesaplayın:
5! = 5 * 4 * 3 * 2 * 1 = 120
Bunu görselleştirmenin başka bir yolu:
5! = 5 * 4! nerede 4! = 4 * 3!, 3! = 3 * 2! ve böylece 1 elde edene kadar! = 1 * 0! hangisi 1.
Bu kavramı, özyineleme adı verilen popüler bir kavramı kullanarak faktöriyel programımızı oluşturmak için kullanacaksınız.
Özyineleme Nedir?
Özyineleme, bir işlevin kendisini çağırdığı bir süreçtir. Bu işlemin ana avantajlarından biri, daha büyük bir sorunu daha küçük parçalara ayırmasıdır. Bu, sorunun çözülmesini kolaylaştırır.
Uygun sorunları üç kolay adımda çözmek için özyinelemeyi kullanabilirsiniz:
- Temel durumu bulun: Bir fonksiyon her zaman kendini çağırırsa, süreç sonsuz olacaktır. Bunun olmasını önlemek için, işleviniz için mantıksal durma noktası olacak bir temel durum tanımlayın. Örneğin, bir faktöriyel programda, hesaplamayı sıfırda durdurun. Bu, sorunun temel durumu haline gelir.
- Problem ile alt problemler arasındaki ilişkiyi bulun: Büyük problemi bir alt probleme ayırın. Örneğin, problem beşin faktöriyelini bulmaktır. Dört faktöriyel cevabınız olduğunu varsayalım, yani 24. 24’ü kullanarak beşin faktöriyelini nasıl elde edeceksiniz? Kendisiyle beşi çarparak. Bu, problem ile alt problem arasındaki ilişkidir.
- Adım 2’de bulunan bağıntıyı genelleştirin: Artık bağıntıyı elde ettiğinize göre, onu n cinsinden genelleştirin. Yani, bir n sayısının faktöriyeli, n’nin ve n-1’in faktöriyelinin çarpımıdır.
- Bu kavramı n tane doğal sayının toplamını bulmak, OBEB, LCM, Fibonacci serisini hesaplamak ve asal sayıları kontrol etmek için kullanabilirsiniz.
Özyinelemeyi Kullanan Faktöriyel İşlev için Sözde Kod
Programınızı herhangi bir dilde oluşturmak için özyinelemeyi bu şekilde kullanır ve sözde kodu yazarsınız. Farklı dillerde sözdizimi ve yürütme değişir, ancak mantık bozulmadan kalır.
function Fact(n)
If n == 0 then // base case
Return 1
Return n * Call Fact(n – 1) // generalized relation
C Faktöriyel Programı
C, ilk üst düzey, platformdan bağımsız programlama diliydi. Katı söz dizimine sahiptir, büyük/küçük harfe duyarlıdır ve kodu en yüksek hızda yürütür. Prosedürel bir programlama dilidir ve bu nedenle ana işlevin üstünde herhangi bir işlevi bildirirsiniz . C dilinde özyinelemeyi kullanarak faktöriyel programı şu şekilde oluşturabilirsiniz:
Bu GitHub deposunda C, Java ve Python’da özyineleme kullanarak faktöriyel programın tüm kaynak kodunu bulabilirsiniz.
Çıktıyı ekranda görüntülemek için standart girdi çıktı başlık dosyasını içe aktarın.
#include <stdio.h>
Fonksiyon olgusunu tanımlayın ve bir argüman olarak n tamsayısını alın.
int fact(int n) {
if ifadesini kullanarak işlevin temel durumunu yazın ve == kullanarak eşitliğini kontrol edin . n sıfıra eşitse, bir döndür.
if (n == 0)
return 1;
Genelleştirilmiş denklemi yazın ve n’nin çarpımını n -1 alt probleminin bir işlev çağrısıyla döndürün.
return n * fact(n – 1);
}
Ana işlevi bildirin ve faktöriyelini bulmak istediğiniz sayıyı saklamak için tamsayı türünde bir değişken başlatın.
int main() {
int num = 5;
printf() işlevini kullanarak sayının faktöriyelini görüntüleyin . %d ondalık biçim belirtecidir. Biçim belirteçlerinin her birini, faktöriyelini bulmak istediğiniz sayı ile değiştirmek için kullanın ve işlevi çağırarak sonucu alın.
printf(“Factorial of %d is %d”, num, fact(num));
return 0;
}
Java’da Faktöriyel Program
Java derlenmiş bir programlama dilidir ve platformdan bağımsızdır. Tüm kodu bir sınıf içinde saklarsınız ve yürütme ana işlevden başlar. Büyük/küçük harf duyarlıdır ve sözdizimi katıdır. Kod, Python’a kıyasla biraz daha uzun ama daha hızlı. Java’da özyinelemeyi kullanarak faktöriyel programı şu şekilde oluşturabilirsiniz:
Ana sınıfı tanımlayın.
class Main {
Tamsayı türünde bir n değişkenini kabul eden int dönüş türüyle statik bir işlev tanımlayın. Java’daki ana yöntem de statik olarak bildirildiği için statik bir yöntem bildirdiniz. Ayrıca, statik bir örnekten statik olmayan bir yöntemi çağıramazsınız.
static int fact(int n) {
if ifadesini kullanarak işlevin temel durumunu yazın ve == kullanarak eşitliğini kontrol edin . n sıfıra eşitse, bir döndür.
if (n == 0)
return 1;
Genelleştirilmiş denklemi yazın ve n’nin çarpımını n -1 alt probleminin bir işlev çağrısıyla döndürün.
return n * fact(n – 1);
}
Java’da ana işlevi bildirin. Diğer tüm sınıflar ve yöntemler tarafından erişilebilir olabilmesi için erişim değiştiricisini public olarak bildirin. Derleyicinin sınıfı başlatmadan onu çağırabilmesi için ana işlevi statik olarak bildirirsiniz. Dönüş türü geçersizdir ve String türündeki bağımsız değişkenleri kabul eder . Faktöriyelini bulmak istediğiniz sayıyı kaydedin.
public static void main(String[] args) {
int num = 5;
Sayının faktöriyelini görüntülemek için System sınıfında tanımlanan PrintStream sınıfının bir örneği olan println() yöntemini kullanın.
System.out.println(“Factorial of ” + num + ” is ” + fact(num));
}
}
Python’da Faktöriyel Program
Python’da kod yazmak çok kolay ve eğlencelidir. Yorumlanmış platformdan bağımsız bir dil olduğundan, değişkenlerin veri türünü bildirmeniz gerekmez. Ayrıca, böyle basit bir program için sınıfları bildirmek ve kitaplıkları içe aktarmak zorunda kalmazsınız. Oyun alanı kodlamaya başlamanız için hazır.
Sözdizimi, küçük bir kod uzunluğuyla daha kolaydır, ancak yürütülmesi diğer dillerden biraz daha fazla zaman alır. Python’da özyinelemeyi kullanarak faktöriyel programı şu şekilde oluşturabilirsiniz:
Argüman n olarak kabul eden fonksiyon olgusunu tanımlayın.
def fact(n):
if ifadesini kullanarak işlevin temel durumunu yazın ve == kullanarak eşitliğini kontrol edin. n sıfıra eşitse, bir döndür.
if n == 0:
return 1
Genelleştirilmiş denklemi yazın ve n’nin çarpımını n -1 alt probleminin bir işlev çağrısıyla döndürün.
return n * fact(n-1)
Faktöriyelini bulmak istediğiniz sayıyı kaydedin ve print deyimini kullanarak görüntüleyin.
num = 5;
print(“Factorial of”, num, “is”, fact(num))
Özyinelemenin Birçok Uygulaması Vardır
Özyineleme, sorunları çözmenin etkili bir yoludur. Yapay Zekanın özüdür ve satranç veya Sudoku gibi bulmaca oyunlarında gerçek dünya kullanımlarına sahiptir.
Ayrıca, Ağaç gibi veri yapılarını veya Hızlı sıralama ve Birleştir sıralama gibi sıralama algoritmalarını sıralamak için güçlü bir yöntemdir. Özyinelemeyi İkili arama gibi algoritmaları, Fibonacci serisi gibi matematiksel ifadeleri ve daha fazlasını aramada da kullanabilirsiniz.