Fibonacci Serisi Java Özyineleme ve Döngüler kullanarak
⚡ Akıllı Özet
Fibonacci Serisi Java Bu makale, her terimin kendisinden önceki iki terimin toplamına eşit olduğu bir dizi oluşturur. Ayrıca for döngüsü, while döngüsü, kullanıcı girişi, özyinelemeli ve belleklenmiş (memoized) programları da ele almaktadır. tracÖzyinelemeyi inceler ve her yaklaşımın zaman karmaşıklığını karşılaştırır.

Fibonacci Dizisi Nedir? Java?
A Fibonacci Serisi in Java Fibonacci serisi, bir sonraki sayının önceki iki sayının toplamı olduğu bir sayı dizisidir. Fibonacci serisinin ilk iki sayısı 0 ve 1'dir. Fibonacci sayıları, iki tamsayının en büyük ortak bölenini belirleyen algoritmanın hesaplama çalışma süresi incelemesinde önemli ölçüde kullanılır.
The Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
Formül olarak ifade edildiğinde, kural F(n) = F(n-1) + F(n-2) şeklindedir; burada F(0) = 0 ve F(1) = 1'dir. Aşağıdaki tablo ilk sekiz terimin nasıl üretildiğini göstermektedir.
| Pozisyon (n) | Hesaplama | Özellik |
|---|---|---|
| 0 | Temel durum | 0 |
| 1 | Temel durum | 1 |
| 2 | 0 + 1 | 1 |
| 3 | 1 + 1 | 2 |
| 4 | 1 + 2 | 3 |
| 5 | 2 + 3 | 5 |
| 6 | 3 + 5 | 8 |
| 7 | 5 + 8 | 13 |
Fibonacci Dizisi Programı Java For Döngüsü'nü kullanma
Yinelemeli sürüm, herhangi bir anda bellekte yalnızca iki değer tutar; bu nedenle doğrusal zamanda ve sabit bellek kullanımıyla çalışır.
//Using For Loop
public class FibonacciExample {
public static void main(String[] args)
{
// Set it to the number of elements you want in the Fibonacci Series
int maxNumber = 10;
int previousNumber = 0;
int nextNumber = 1;
System.out.print("Fibonacci Series of "+maxNumber+" numbers:");
for (int i = 1; i <= maxNumber; ++i)
{
System.out.print(previousNumber+" ");
/* On each iteration, we are assigning second number
* to the first number and assigning the sum of last two
* numbers to the second number
*/
int sum = previousNumber + nextNumber;
previousNumber = nextNumber;
nextNumber = sum;
}
}
}
Çıktı:
Fibonacci Series of 10 numbers:0 1 1 2 3 5 8 13 21 34
Programın Mantığı:
- previousNumber 0'a, nextNumber ise 1'e başlatılmıştır.
- Fibonacci for döngüsü, aşağıdaki adımları izleyerek ilerler:
maxNumber:- Önceki sayıyı görüntüle.
- Önceki sayı ile sonraki sayının toplamını hesaplayın.
- previousNumber ve nextNumber değişkenlerinin yeni değerlerini güncelleyin.
Fibonacci Dizisi Programı Java While Döngüsünü kullanma
Ayrıca bir tane de oluşturabilirsiniz. Java Fibonacci serisini kullanarak while döngü JavaAritmetik işlemler aynıdır, sadece döngü sözdizimi değişir.
//Using While Loop
public class FibonacciWhileExample {
public static void main(String[] args)
{
int maxNumber = 10, previousNumber = 0, nextNumber = 1;
System.out.print("Fibonacci Series of "+maxNumber+" numbers:");
int i=1;
while(i <= maxNumber)
{
System.out.print(previousNumber+" ");
int sum = previousNumber + nextNumber;
previousNumber = nextNumber;
nextNumber = sum;
i++;
}
}
}
Çıktı:
Fibonacci Series of 10 numbers:0 1 1 2 3 5 8 13 21 34
Program mantığındaki tek fark, Fibonacci sayılarını yazdırmak için while döngüsünün kullanılmasıdır. Sayaç, döngüden önce tanımlanmalı ve döngü içinde artırılmalıdır, aksi takdirde döngü asla bitmez.
Kullanıcı Girişine Dayalı Fibonacci Serisi
Terim sayısını doğrudan kodlamak bir gösterim için uygundur, ancak gerçek uygulamalarda değer genellikle klavyeden okunur. Scanner sınıfı bunu üç satırda halleder ve üretim mantığına dokunulmaz.
//fibonacci series based on the user input import java.util.Scanner; public class FibonacciUserInput { public static void main(String[] args) { int maxNumber = 0; int previousNumber = 0; int nextNumber = 1; System.out.println("How many numbers you want in Fibonacci:"); Scanner scanner = new Scanner(System.in); maxNumber = scanner.nextInt(); System.out.print("Fibonacci Series of " + maxNumber + " numbers:"); for (int i = 1; i <= maxNumber; ++i) { System.out.print(previousNumber + " "); /* On each iteration, we are assigning the second number * to the first number and assigning the sum of the last two * numbers to the second number */ int sum = previousNumber + nextNumber; previousNumber = nextNumber; nextNumber = sum; } scanner.close(); } }
Örnek Çalıştırma:
How many numbers you want in Fibonacci: 7 Fibonacci Series of 7 numbers:0 1 1 2 3 5 8
Programın Mantığı:
Mantık öncekiyle aynı. Gösterilecek öğe sayısını sabit kodlamak yerine, Java Fibonacci serisinde, kullanıcıdan bir sayı girmesi istenir.
Özyinelemeyi Kullanan Fibonacci Serisi Java
Aşağıda Fibonacci serisi programı yer almaktadır. Java özyineleme kullanarak:
//Using Recursion
public class FibonacciCalc{
public static int fibonacciRecursion(int n){
if(n == 0){
return 0;
}
if(n == 1 || n == 2){
return 1;
}
return fibonacciRecursion(n-2) + fibonacciRecursion(n-1);
}
public static void main(String args[]) {
int maxNumber = 10;
System.out.print("Fibonacci Series of "+maxNumber+" numbers: ");
for(int i = 0; i < maxNumber; i++){
System.out.print(fibonacciRecursion(i) +" ");
}
}
}
Çıktı:
Fibonacci Series of 10 numbers: 0 1 1 2 3 5 8 13 21 34
Programın Mantığı:
Özyinelemeli bir işlev, kendisini çağırma yeteneğine sahip olan bir işlevdir.
fibonacciYineleme():
- MKS Java Fibonacci özyinelemeli fonksiyonu, girdi olarak bir sayı alır. 0, 1 ve 2 değerlerini kontrol eder ve sırasıyla 0, 1, 1 değerlerini döndürür, çünkü Fibonacci dizisi 0, 1 ve 2'den oluşur. Java 0, 1, 1 ile başlar.
- Giriş değeri n 3 veya daha büyük olduğunda, fonksiyon kendini özyinelemeli olarak çağırır. Çağrı iki kez yapılır. tracAşağıda 4 girişi için bir çağrı yer almaktadır.
fibonacciRecursion(4)
= fibonacciRecursion(2) + fibonacciRecursion(3)
fibonacciRecursion(2) = 1 // base case, no further calls
fibonacciRecursion(3) = fibonacciRecursion(1) + fibonacciRecursion(2)
= 1 + 1
= 2
Result: 1 + 2 = 3
Temel durumlar inişi durdurur. 1 ve 2'nin her ikisi de hemen geri döndüğü için, fibonacciRecursion(2) için dal asla daha fazla genişlemez, bu da inişi durdurur. trace sonlu.
Memoizasyon Kullanılarak Optimize Edilmiş Fibonacci Serisi
Basit özyineleme, aynı terimleri birçok kez yeniden hesaplar. 40. terimi hesaplamak 200 milyondan fazla çağrı gerektirir. Her sonucun ilk hesaplandığında saklanması, bu tekrarlamayı tamamen ortadan kaldırır.
public class FibonacciMemo { static long[] cache; public static long fib(int n) { if (n <= 1) { return n; } // return the stored value when it exists if (cache[n] != 0) { return cache[n]; } cache[n] = fib(n - 1) + fib(n - 2); return cache[n]; } public static void main(String[] args) { int maxNumber = 90; cache = new long[maxNumber + 1]; System.out.println("Term 50 is: " + fib(50)); System.out.println("Term 90 is: " + fib(90)); } }
Çıktı:
Term 50 is: 12586269025 Term 90 is: 2880067194370816120
⚠️Uyarı: Fibonacci dizisinin 47. terimi 2971215073'tür ve bu değer, tamsayı maksimum değeri olan 2147483647'yi aşarak negatif bir değere döner. Sayı 46'yı geçtikten sonra değişkenleri long olarak tanımlayın ve 92. terimden sonra BigInteger'a geçin.
Fibonacci Yöntemlerinin Karşılaştırılması Java
Dört programın hepsi aynı diziyi yazdırıyor, bu nedenle karar kaç terime ihtiyaç duyulduğuna bağlı.
| Yöntem | Zaman Karmaşıklığı | Uzay Karmaşıklığı | Pratik Limit |
|---|---|---|---|
| Döngü için | O (n) | O (1) | Sayı türüne bağlı olarak herhangi bir sayım. |
| Döngü sırasında | O (n) | O (1) | Sayı türüne bağlı olarak herhangi bir sayım. |
| Basit özyineleme | Ç(2ⁿ) | O(n) yığını | Yavaşlamaya başlamadan önce yaklaşık 40 dönem geçiyor. |
| Belleklemeli özyineleme | O (n) | O (n) | Sayı türüne bağlı olarak herhangi bir sayım. |
Aynı sayaç ve biriktirici deseni, birbiriyle ilişkili birkaç alıştırmada daha karşımıza çıkıyor. Devam edin... Java palindrom programı, Java asal sayıyı kontrol eden program, Ve 1'den 100'e kadar asal sayıları yazdıran programDizi tabanlı uygulamalar için bakınız. Bubble Sırala Java hem de Java dizilerve gözden geçirin her döngü için Java alternatif döngü sözdizimi için.
