2 மாறிகள் பயன்படுத்தி ஃபைபோனச்சி வரிசையை அச்சிடுக


சிரமம் நிலை எளிதாக
அடிக்கடி கேட்கப்படுகிறது அமேசான் Delhivery உண்மை ஃபோர்கைட்டுகள் உயர்வு MAQ o9 தீர்வுகள் PayU
டைனமிக் புரோகிராமிங் பிபோனச்சி வரிசை

சிக்கல் அறிக்கை

“2 மாறிகளைப் பயன்படுத்தி பைபோனச்சி வரிசையை அச்சிடு” என்ற சிக்கல் நீங்கள் ஃபைபோனச்சி வரிசையை அச்சிட வேண்டும் என்று கூறுகிறது, ஆனால் 2 மாறிகள் மட்டுமே பயன்படுத்துவதற்கான வரம்பு உள்ளது.

உதாரணமாக

2 மாறிகள் பயன்படுத்தி ஃபைபோனச்சி வரிசையை அச்சிடுக

n = 5
0 1 1 2 3 5

விளக்கம்

வெளியீட்டு வரிசை ஃபைபோனச்சி தொடரின் முதல் ஐந்து கூறுகளைக் கொண்டுள்ளது.

அணுகுமுறை

எங்களுக்கு ஒரு உறுப்பு உள்ளீடாக வழங்கப்படுகிறது, இது ஃபைபோனச்சி வரிசையில் தயாரிக்கப்பட வேண்டிய உறுப்புகளின் எண்ணிக்கையை நமக்கு சொல்கிறது. எனவே ஃபைபோனச்சி வரிசையை அச்சிடுவதற்கான அப்பாவியாக இருக்கும் அணுகுமுறை மறுநிகழ்வு. ஒவ்வொரு ஃபைபோனச்சி எண்ணையும் கணக்கிடுவதற்கு எங்கள் சுழல்நிலை செயல்பாட்டை அழைக்கும் ஒரு சுழற்சியைப் பயன்படுத்தலாம். ஆனால் இந்த அணுகுமுறைக்கு அதிவேக நேரம் தேவைப்படுகிறது, இதனால் நமக்கு இன்னும் திறமையான ஒன்று தேவை.

நாம் சிந்திக்க முடியும் டைனமிக் நிரலாக்க/ சிக்கலுக்கான நினைவூட்டல். அணுகுமுறை நிச்சயமாக நேர சிக்கலைக் குறைக்கும். அதிவேக நேர சிக்கலானது நேரியல் நேர சிக்கலாகக் குறைக்கப்படும். ஆனால் இந்த அணுகுமுறை இன்னும் எங்களுக்கு நேரியல் விண்வெளி சிக்கலானது தேவைப்படுகிறது. இந்த இட சிக்கலை நாம் மேலும் குறைக்க வேண்டும். நாம் என்ன செய்ய முடியும் என்பதை மேம்படுத்த முயற்சி டைனமிக் நிரலாக்க அணுகுமுறை.

சுழல்நிலை சூத்திரத்தைக் கண்டால், F (n) = F (n-1) + F (n-2). நாங்கள் கடைசி இரண்டு ஃபைபோனச்சி எண்களை மட்டுமே சார்ந்து இருக்கிறோம். தற்போதைய எண்ணைக் கண்டுபிடிக்க கடைசி இரண்டு ஃபைபோனச்சி எண்களை மட்டுமே நாம் சேமிக்க முடியும், இது வழிமுறை O (1) விண்வெளி சிக்கலில் இயங்க வைக்கிறது.

குறியீடு

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

ஜாவா குறியீடு 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

சிக்கலான பகுப்பாய்வு

நேர சிக்கலானது

ஓ (என்), ஏனென்றால் நாம் அச்சிட வேண்டிய உறுப்புகளின் எண்ணிக்கை வரை மட்டுமே பயணித்திருக்கிறோம். முதலில், மறுநிகழ்வைப் பயன்படுத்தி சிக்கலைத் தீர்க்க நினைத்தோம், ஆனால் அது காலப்போக்கில் அதிவேகமானது. நாங்கள் பயன்படுத்தும் போது எங்கள் நேர சிக்கலைக் குறைத்தோம் டைனமிக் நிரலாக்க. இதன் காரணமாக சிக்கலை நேரியல் நேரத்தில் தீர்க்க முடிந்தது.

விண்வெளி சிக்கலானது

ஓ (1),  நாங்கள் இரண்டு மாறிகள் மட்டுமே பயன்படுத்தியதால் நிலையான விண்வெளி சிக்கலில் சிக்கலை தீர்த்துள்ளோம்.