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.

  • Temel Kural: Her terim, kendisinden önceki iki terimin toplamıdır ve dizi 0 ve 1 ile başlar.
  • 🔁 Yinelemeli Desen: İki değişken önceki ve sonraki değerleri tutar ve geçici bir toplam, her geçişte bunları ileriye doğru kaydırır.
  • ???? Özyinelemeli Desen: Bu yöntem, her terim için kendisini iki kez çağırır; 0, 1 ve 2 temel durumlar olarak kabul edilir.
  • ⏱️ Karmaşıklık Açığı: Döngüler O(n) zamanında çalışırken, basit özyineleme O(2ⁿ) zamanında çalışır ve yaklaşık 40 terimden sonra kullanılamaz hale gelir.
  • ???? Ezberleme Düzeltmesi: Hesaplanan terimleri bir dizide önbelleğe almak, doğrusal zamanı geri kazandırırken,ping Özyinelemeli yapı.
  • ⚠️ Taşma Sınırı: 47. terim tamsayı aralığını aşıyor, bu nedenle daha uzun diziler için long veya BigInteger gereklidir.
  • ⌨️ Kullanıcı Girişi: Scanner sınıfı, üretim mantığında herhangi bir değişiklik yapmadan, çalışma zamanında istenen sayıyı okur.

Fibonacci Serisi Java

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():

  1. 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.
  2. 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.

SSS

Her iki gösterim de mevcuttur. Bilgisayar biliminde ilk iki terim olarak genellikle 0 ve 1 kullanılır, bu programlar da öyle yapar. Bazı matematik metinleri ise bunun yerine 1 ve 1'den başlar.

Her çağrı iki ek çağrı daha doğurur, bu nedenle her ek terimle iş yükü ikiye katlanır. Aynı alt problemler tekrar tekrar çözülür, bu da çağrı sayısında üstel bir artışa yol açar.

Bir tamsayı (int) 46'ya kadar olan terimleri, bir uzun tamsayı (long) ise 92'ye kadar olan terimleri saklar. Bundan sonra, değerler 64 bitten büyük olduğu için BigInteger gereklidir.

Ardışık terimler, yaklaşık 1.618 olan altın orana yaklaşır. Bu örüntü, yaprak diziliminde, kabuk spirallerinde, çevik tahmin ölçeklerinde ve ticarette teknik analizde görülür.

Genellikle en yaygın ders kitabı örneği olduğu için basit özyinelemeli kod döndürürler. Terim sayısı büyük olduğunda açıkça yinelemeli veya önbelleğe alınmış bir çözüm isteyin.

Önbellekleme çakışmasının olduğu en küçük sorun budur.ping Alt problemler, hızda önemli bir artış sağlar. Aynı prensip, yapay zeka planlama algoritmalarındaki önbelleğe alınmış arama ve değer önbelleklemesinin de temelini oluşturur.

Bu yazıyı şu şekilde özetleyin: