Teknologian jakaminen

[Likou] Yksi kysymys päivässä – Kysymys 70, Portaiden kiipeäminen

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

aihe:

Oletetaan, että kiipeät portaita. Kestää n askelta päästäksesi rakennuksen huipulle.

Voit kiivetä 1 tai 2 askelmaa kerrallaan. Kuinka monella eri tavalla voit kiivetä rakennuksen huipulle?

Idea:

Kirjoitin ensin funktion laskemaan ensimmäiseen ja toiseen kerrokseen kiipeävien ihmisten lukumäärän ja sitten järjestin ja summasin ne, mutta se oli myöhemmin vaihteluvälin ulkopuolella, mutta tulos oli väärä.,,,.

En tiedä miksi,

Myöhemmin, kun katsoin tuloksia, ne näyttivät yhä tutummilta. Eikö tämä ole Fibonacci-sekvenssi?

Se tapahtuu myöhemmin

Tuloskoodi:

  1. int climbStairs(int n) {
  2.   //int n,j;
  3.   int sum=0;
  4.   //scanf("%d",&n);
  5.   int f_1=1;
  6.   int f_2=2;
  7.   int f_n=0;
  8.   //int f_n_1=0;
  9.   if(n==0||n==1||n==2)
  10.   {
  11.       return n;
  12.   }
  13.   for(int i=1;i<=n-2;i++)
  14.   {
  15.       f_n=f_1+f_2;
  16.       //f_n_1=f_n+f_2;
  17.       f_1=f_2;
  18.       f_2=f_n;
  19.   }
  20.   return f_n;
  21.   // return 0;
  22.    
  23. }

Jatka samaan malliin! ! ! ! ! ! !

Pääni on tyhjä.

Jos on parempi ratkaisu, kerro minulle, kiitos!

Lisää rekursiivinen menetelmä:

Rekursiivinen ajattelu:

Sama kuin Fibonacci-sekvenssi, eli käytät rekursiota Fibonaccin kirjoittamiseen ja lopuksi tulosta

Katso koodi:

  1. int *func(int n,int* f_n,int f_1,int f_2)
  2. {    
  3.   --n;
  4.   if(n == -1)
  5.       return n;  
  6.   f_n[n] = f_1+f_2;
  7.   f_1 = f_2;
  8.   f_2 = f_n[n];
  9.   func(n,f_n,f_1,f_2);
  10.   return f_n;
  11. }
  12. int climbStairs(int n) {
  13.    
  14.   int f_n[n];
  15.   func(n,f_n,0,1);
  16.   return f_n[0];
  17. }

Toivottavasti voin tänään paremmin kuin eilen!

Pysy menossa! !