Fibonaççi ardıcıllığı#3258

Fibonaççi ardıcıllığı (Həll təhlili)

Bu məsələdə -ci Fibonacci ədədini tapmaq tələb olunur. n \le 40 olduqda rekursiv həll vaxtı ötmədən çalışacaq. Fibonacci ardıcıllığı belə görünür:

-də saxlanıla biləcək ən böyük Fibonacci ədədi

f_{46} = 1836311903

n \le 40 olduqda verilənlər tipindən istifadə etmək kifayətdir.

Fərz edək ki, fib(n) funksiyası -ci Fibonacci ədədini hesablayır. Onda belə bir rekursiv tənlik ortaya çıxır:

fib(n) = \begin{cases} 0 & \text{əgər } n = 0 \\ 1 & \text{əgər } n = 1 \\ fib(n-1) + fib(n-2) & \text{əks halda} \end{cases}

Alqoritmin realizasiyası

fib funksiyası -ci Fibonacci ədədini hesablayır.

int fib(int n)
{
  if (n == 0) return 0;
  if (n == 1) return 1;
  return fib(n - 1) + fib(n - 2);
}

Proqramın əsas hissəsi. dəyərini oxuyuruq, hesablayırıq və çıxış edir.

scanf("%d", &n);
printf("%d\n", fib(n));

Java realizasiyası

import java.util.*;

public class Main
{
  static int f(int n)
  {
    if (n == 0) return 0;
    if (n == 1) return 1;
    return f(n-1) + f(n - 2);
  }
  
  public static void main(String[] args)
  {
    Scanner con = new Scanner(System.in);
    int n = con.nextInt();
    System.out.println(f(n));     
    con.close();
  }
}

Python realizasiyası — memoizasiya

fib funksiyası -ci Fibonacci ədədini hesablayır.

def fib(n):
  if dp[n] != -1:
    return dp[n]
  dp[n] = fib(n - 1) + fib(n - 2)
  return dp[n]

Proqramın əsas hissəsi. Giriş dəyəri oxuyuruq.

n = int(input())

siyahısını başlayırıq.

dp = (n + 1) * [-1]
dp[0] = 0
dp[1] = 1

Cavabı hesablayırıq və çıxış edirik.

print(fib(n))

Python realizasiyası — memoizasiya 2

arr = {}

fib funksiyası -ci Fibonacci ədədini hesablayır.

def fib(n):
  if (n == 0): return 0
  if (n == 1): return 1
  if n not in arr:
    arr[n] = fib(n - 1) + fib(n - 2)
  return arr[n]

Proqramın əsas hissəsi. dəyərini oxuyuruq, hesablayırıq və çıxış edirik.

n = int(input())
print(fib(n))

Python realizasiyası — memoizasiya 3

arr = {0:0, 1:1}

fib funksiyası -ci Fibonacci ədədini hesablayır.

def fib(n):
  if arr.get(n) is None:
    arr[n] = fib(n - 1) + fib(n - 2)
  return arr[n]

Proqramın əsas hissəsi. dəyərini oxuyuruq və -ni çıxış edirik.

n = int(input())
print(fib(n))

Python realizasiyası — TLE

fib funksiyası -ci Fibonacci ədədini hesablayır.

def fib(n):
  if (n == 0): return 0
  if (n == 1): return 1
  return fib(n - 1) + fib(n - 2)

Proqramın əsas hissəsi. dəyərini oxuyuruq, hesablayırıq və çıxış edirik.

n = int(input())
print(fib(n))