Bir sayının faktöriyeli, o sayıdan 1'e kadar olan tüm pozitif tam sayıların çarpımıdır. Matematiksel gösterimi: n!
Bu araçta kullanılan yöntem, bir döngü ile sayıyı 1'e kadar azaltarak çarpar:
function getFactorial(number) {
let factorial = 1;
while (number >= 1) {
factorial *= number; // factorial = factorial * number
number--; // number = number - 1
}
return factorial;
}
Algoritmanın nasıl çalıştığını görelim:
// Başlangıç: number = 5, factorial = 1
// İterasyon 1:
factorial = 1 * 5 = 5
number = 5 - 1 = 4
// İterasyon 2:
factorial = 5 * 4 = 20
number = 4 - 1 = 3
// İterasyon 3:
factorial = 20 * 3 = 60
number = 3 - 1 = 2
// İterasyon 4:
factorial = 60 * 2 = 120
number = 2 - 1 = 1
// İterasyon 5:
factorial = 120 * 1 = 120
number = 1 - 1 = 0
// number = 0, döngü biter
// Sonuç: 120
Aynı işlemi for döngüsü ile de yapabiliriz:
function getFactorial(n) {
let factorial = 1;
// n'den 1'e kadar geriye doğru say
for (let i = n; i >= 1; i--) {
factorial *= i;
}
return factorial;
}
// Veya ileriye doğru:
for (let i = 1; i <= n; i++) {
factorial *= i;
}
Faktöriyel, recursive fonksiyonlarla da hesaplanabilir:
function factorial(n) {
// Base case: 0! = 1 ve 1! = 1
if (n <= 1) {
return 1;
}
// Recursive case: n! = n × (n-1)!
return n * factorial(n - 1);
}
// Örnek: factorial(5)
// 5 * factorial(4)
// 5 * (4 * factorial(3))
// 5 * (4 * (3 * factorial(2)))
// 5 * (4 * (3 * (2 * factorial(1))))
// 5 * (4 * (3 * (2 * 1)))
// = 120
*= operatörü, değişkeni kendisiyle çarpar ve sonucu tekrar değişkene atar:
factorial *= number;
// Yukarıdaki şununla aynıdır:
factorial = factorial * number;
// Diğer kısa operatörler:
factorial += number; // factorial = factorial + number
factorial -= number; // factorial = factorial - number
factorial /= number; // factorial = factorial / number
0! ve 1!:
// 0! = 1 (matematiksel tanım)
// Döngü çalışmaz, factorial = 1 kalır ✓
// 1! = 1
// 1 iterasyon: factorial = 1 * 1 = 1 ✓
BigInt kullanılmalıfunction factorialBigInt(n) {
let factorial = 1n; // BigInt literal
let number = BigInt(n);
while (number >= 1n) {
factorial *= number;
number--;
}
return factorial;
}
factorialBigInt(100); // Çok büyük sayıları handle eder