Faktöriyel Hesaplama

Sayı:
Faktöriyel:

📚 Algoritma Nasıl Çalışıyor?

Faktöriyel (Factorial) Nedir?

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!

  • 5! = 5 × 4 × 3 × 2 × 1 = 120
  • 3! = 3 × 2 × 1 = 6
  • 0! = 1 (tanım gereği)
  • 1! = 1

1. İteratif (Döngü ile) Yöntem

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;
}

2. Adım Adım Örnek: 5!

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

3. For Döngüsü ile Alternatif

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;
}

4. Recursive (Özyinelemeli) Yöntem

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

5. Çarpma Operatörü (*=)

*= 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

6. Özel Durumlar

0! ve 1!:

// 0! = 1 (matematiksel tanım)
// Döngü çalışmaz, factorial = 1 kalır ✓

// 1! = 1
// 1 iterasyon: factorial = 1 * 1 = 1 ✓

Önemli Noktalar

  • Büyük Sayılar: JavaScript'te büyük faktöriyeller için BigInt kullanılmalı
  • Performans: İteratif yöntem, recursive yöntemden genelde daha hızlıdır
  • Stack Overflow: Recursive yöntem büyük sayılarda stack taşmasına neden olabilir
  • Negatif Sayılar: Faktöriyel sadece 0 ve pozitif tam sayılar için tanımlıdır

Büyük Sayılar için BigInt

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