2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Fibonacci-lukujonoa (jota yleensä edustaa F(n)) kutsutaan Fibonacci-sekvenssiksi.Sarja alkaa 0:lla ja 1:llä, jota seuraa
Jokainen luku on kahden edellisen luvun summa. Tuo on:
F(0)=0,F(1)=1
F(n)=F(n-1)+ F(n-2), missä n>1, kun n(0 ≤n≤ 30), laske F(n)
Kun olet saanut tämän kysymyksen, katsotaan ensin kysymyksen aluetta, joka ei saa ylittää 30:tä Tämä johtuu siitä, että Fibonacci-lukujen kasvunopeus on erittäin nopea.
Nopeasti, eksponentiaalisesti. Joten jos n on suuri, se ylittää C-kielen 32-bittisten kokonaislukujen alueen.Tämä on yksinkertaisin toimitus
Olemme jo kertoneet sinulle päättelykysymyksen ja rekursiokaavan. Meidän tarvitsee vain käyttää silmukkaa toteuttamaan tämä rekursio.
Meidän tarvitsee vain käyttää F[31]-taulukkoa, alustaa F[0] ja F[1] ja sitten laskea se silmukassa annetun kaavan mukaan.
int febonacci(int n) {
int F[30] = {0,1};
for (int i = 2; i < 30; i++) {
F[i] = F[i - 1] + F[i - 2];
}
return F[29]
}
Tabonaccin sekvenssi Tn määritellään seuraavasti:
T(0) = 0, T(1) = 1, T(2) = 1
Ja ehdolla n>2, T(n)=T(n-1)+T(n-2)+T(n-3), jolloin saat kokonaisluvun n, palauta n:s Tabonacci
Numeron T(n) arvo.
Jos ymmärrät jo Fibonacci-sekvenssin, tämä ongelma ei ole vaikea, mutta alustuksen aikana sinun on alustettava kolme ensimmäistä numeroa.
Ja silmukan iteroinnin aikana nykyisen luvun arvo vaatii kolmen edellisen luvun arvojen kumulatiivisen summan. kuten tämä:
int tribonacci(int n) {
int F[30] = {0,1,1};
for (int i = 3; i < 30; i++) {
F[i] = F[i - 1] = F[i - 2] + F[i - 3];
}
return F[29];
}
Fibonacci-sekvenssin kaltaiset ongelmat voidaan ratkaista yksiulotteisella taulukolla. Joskus, kun yksi ulottuvuus ei pysty ratkaisemaan sitä, I
Meidän on tarkasteltava ongelmaa korkeammasta ulottuvuudesta.
Pituus on n(1
Mutta muita merkkejä ei saa olla) ja on kiellettyä olla M vierekkäin Kuinka monta tyyppiä tällaisia merkkijonoja on?
Oletetaan, että pituus on n, ja on f[n][0] tyyppistä merkkijonoa, joka päättyy 'A', f[n][1] tyyppistä merkkijonoa, joka päättyy 'C', ja on f[n][ 1] merkkijonoja, jotka päättyvät ''
f[n][2] lajia
Fibonaccin numerot(yleensä käytettyF(n)
edustaa) muodostettua sekvenssiä kutsutaanFibonaccin sekvenssi .Tämä sekvenssi koostuu0
ja1
Aluksi jokainen seuraava luku on kahden edellisen luvun summa.
int fib(int n){
if(n == 0){
return 0;
}
else if (n == 1){
return 1;
}
return fib(n - 1) + fib(n - 2);
}
Oletetaan, että kiipeät portaita.tarven
Pääset rakennuksen huipulle portaita ottamalla.
aina kun voit kiivetä1
tai2
askel. Kuinka monella eri tavalla voit kiivetä rakennuksen huipulle?
int climbStairs(int n) {
int f[46];
f[0] = 1;
f[1] = 1;
for(int i = 2; i <= n; i++){
f[i] = f[i - 1] + f[i - 2];
}
return f[n];
}
Annettu ei-negatiivinen indeksirowIndex
, palaa "Yang Huin kolmion" kolmanteen pisteeseenrowIndex
OK.
int* getRow(int rowIndex, int* returnSize) {
int f[34][34];
for(int i = 0; i <= rowIndex; i++){
for(int j = 0; j <= i; j++){
if(j ==0 || j == i){
f[i][j] = 1;
}
else {
f[i][j] = f[i - 1][j] + f[i - 1][j - 1];
}
}
}
int* ret = (int *)malloc (sizeof(int) * (rowIndex + 1));
for(int j = 0; j <= rowIndex; j++){
ret[j] = f[rowIndex][j];
}
*returnSize = rowIndex + 1;
return ret;
}