package rozwiazania_zadan.r2.z1.p3_fib;

import java.util.Scanner;

// W tej wersji funkcja wypisuje znaczek na odpowiednim poziomie wcięcia, aby pokazać jak dużo razy jest uruchamiana przy podejściiu rekurencyjnym
public class Fibonacci1_IlustracjaWykladniczejRekurencji {
	private static int kolumna_wyrownania = 50;
	
	static long fib(int n) {
		System.out.println(" ".repeat(kolumna_wyrownania-n) + ">");
		long wynik;
		if(n == 0) {
			wynik = 0;
		} else if(n == 1) {
			wynik = 1;
		} else {
			long res1 = fib(n-1);
			long res2 = fib(n-2);
			wynik = res1 + res2;
		}
		System.out.println(" ".repeat(kolumna_wyrownania-n) + "<");
		return wynik;
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("Aby zakończyć, wpisz -1");
		while(true) {
			System.out.print("\nPodaj liczbę: ");
			int liczba = sc.nextInt();
			if(liczba < 0) break;
			kolumna_wyrownania = liczba;
			
			// pomiar czasu
			long p = System.currentTimeMillis();
			var wynik = fib(liczba);
			long k = System.currentTimeMillis();
			
			System.out.println("F(" + liczba + ") = " + wynik);
			System.out.println("Obliczenie trwało " + (k-p) + " ms");
			System.out.println();
		}

	}

}
