דרוק Fibonacci סיקוואַנס ניצן 2 וועריאַבאַלז


שוועריקייט לעוועל גרינג
אָפט געבעטן אין אַמאַזאָן דעליווערי פאַקסעט פאָורקיטעס שפּאַציר מאַק אָ 9 סאַלושאַנז PayU
דינאַמיש פּראָגראַממינג פיבאַנאַטשי סעקווענסע

פּראָבלעם סטאַטעמענט

דער פּראָבלעם "פּרינט Fibonacci סיקוואַנס ניצן 2 וועריאַבאַלז" זאגט אַז איר דאַרפֿן צו דרוקן די Fibonacci סיקוואַנס, אָבער עס איז אַ באַגרענעצונג צו נוצן בלויז 2 וועריאַבאַלז.

בייַשפּיל

דרוק Fibonacci סיקוואַנס ניצן 2 וועריאַבאַלז

n = 5
0 1 1 2 3 5

דערקלערונג

דער רעזולטאַט סיקוואַנס האט די ערשטע פינף עלעמענטן פון די Fibonacci סעריע.

צוגאַנג

מיר צושטעלן אַ איין עלעמענט ווי ינפּוט, וואָס דערציילט אונדז די נומער פון עלעמענטן וואָס מוזן זיין געשאפן פון די Fibonacci סיקוואַנס. אַזוי דער נאַיוו צוגאַנג צו דרוקן Fibonacci סיקוואַנס איז רעקורסיאָן. דערנאָך מיר קענען נוצן אַ שלייף וואָס רופט אונדזער רעקורסיווע פונקציע פֿאַר כעזשבן פון יעדער Fibonacci נומער. אָבער דעם צוגאַנג ריקווייערז עקספּאָונענשאַל צייט און מיר דאַרפֿן עפּעס מער עפעקטיוו.

מיר קענען טראַכטן פון דינאַמיש פּראָגראַממינג/ מעמאָיזאַטיאָן פֿאַר דעם פּראָבלעם. דער צוגאַנג וועט שורלי רעדוצירן די צייט קאַמפּלעקסיטי. די עקספּאָונענשאַל צייט קאַמפּלעקסיטי וועט זיין רידוסט צו לינעאַר צייט קאַמפּלעקסיטי. אָבער, דעם צוגאַנג נאָך ריקווייערז אונדז לינעאַר פּלאַץ קאַמפּלעקסיטי. מיר דאַרפֿן צו רעדוצירן דעם אָרט קאַמפּלעקסיטי ווייַטער. וואָס מיר קענען טאָן איז צו פּרובירן צו אַפּטאַמייז די דינאַמיש פּראָגראַממינג צוגאַנג.

אויב מיר זען די רעקורסיווע פאָרמולע, F (n) = F (n-1) + F (n-2). מיר זענען בלויז אָפענגיק אויף די לעצטע צוויי Fibonacci נומערן. אַזוי מיר קענען בלויז קראָם די לעצטע צוויי Fibonacci נומערן צו געפֿינען די קראַנט נומער, און דאָס אַלגעריד די אַלגערידאַם אין די O (1) פּלאַץ קאַמפּלעקסיטי.

קאָדעקס

C ++ קאָד צו דרוקן Fibonacci סיקוואַנס ניצן 2 וועריאַבאַלז

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;cin>>n;
    int last = 1, lastToLast = 0;
    if(n>=0)
        cout<<lastToLast<<" ";
    if(n>=1)
        cout<<last<<" ";
    for(int i=2;i<=n;i++){
        int cur = last + lastToLast;
        cout<<cur<<" ";
        lastToLast = last;
        last = cur;
    }
}
5
0 1 1 2 3 5

Java קאָד צו דרוקן Fibonacci סיקוואַנס ניצן 2 וועריאַבאַלז

import java.util.*;
class Main{
  
  public static void main(String[] args)
  {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    	int last = 1, lastToLast = 0;
      if(n>=0)
          System.out.print(lastToLast+" ");
      if(n>=1)
          System.out.print(last+" ");
      for(int i=2;i<=n;i++){
          int cur = last + lastToLast;
          System.out.print(cur+" ");
          lastToLast = last;
          last = cur;
      }
  	}
}
5
0 1 1 2 3 5

קאַמפּלעקסיטי אַנאַליסיס

צייט קאַמפּלעקסיטי

אָ (N), ווייַל מיר האָבן דורכגעגאנגען בלויז ביז די נומער פון עלעמענטן וואָס מיר דאַרפֿן צו דרוקן. ערשטער, מיר געדאַנק פון סאַלווינג דעם פּראָבלעם מיט רעקורסיאָן, אָבער דאָס איז געווען עקספּאָונענשאַל אין צייט. דערנאָך מיר רידוסט אונדזער צייט קאַמפּלעקסיטי ווען מיר געוויינט דינאַמיש פּראָגראַממינג. צוליב וואָס מיר זענען ביכולת צו סאָלווע די פּראָבלעם אין לינעאַר צייט.

ספעיס קאַמפּלעקסיטי

אָ (1),  מיר האָבן סאַלווד די פּראָבלעם אין קעסיידערדיק פּלאַץ קאַמפּלעקסיטי ווייַל מיר האָבן געניצט בלויז צוויי וועריאַבאַלז.