/Fibonacci osszeg/1,1,2,3,5,8,13, . Ezt az algoritmust hogyna irjam fel sima C ben?
Egyszeru.
első két számot felveszed egy tömb elejére.
utána csak egy for ciklus ami valtozo -2 és valotzo-1et összeadja :D
röviden:
-bekéred hány fibonacci kell. ( N )
- mallocolsz N méretú tömböt
- első két elem 1
- forciklus: i : 2től -> Nig
tomb[ i ] = tomb[i-2] + tomb [i-1]
ennyi
tömb nélkül:
bekér(n)
a:=1 b:=1
kiír(1 1 )
c:=a+b
ciklus 1től (n-2)ig
( kiír(c )
a:=b
b:=c
c:=a+b)
Fibonacci nem osszeg hanem sorozat, méghozzá rekurzív sorozat.
Vagy rekurzívan is lehet pszedudo kód:
fib(n){
if n<=1 then
return 1 else
return fib(n-1)+fib(n-2);
}
De ez lassú mert rengetegszer kiszámolja ugyan azt az értéket, de lehet ezen segíteni memorizálni egy tömbbe a már kiszámolt értékeket.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int a=1,b=1,c,i,n;
printf("%d %d",a,b);
c= a+b;
for (i = 1 ; i <= 10;i++){
a = b;
b = c;
c = a + b;
printf("A: %d B: %d C: %d \n",a,b,c);
}
}
ez nem adja ugyan azt a sorozatot
#include <stdio.h>
#include <stdlib.h>
/* Függvény prototípusok */
int* N_meretu_tombot_foglal( int );
void fibonacci_feltolt( int *, int );
void fibonacci_kiir( int *, int );
int main()
{
/* Pointer ami a tömbre fog mutatni */
int *fibonacci;
/* N tárolja hogy hány fibonaccit akarsz megkapni ( továbbá ekkora tömböt fogok foglalni a függvényben ) */
int N = 40;
/* A visszakapott tömböt letárolom */
fibonacci = N_meretu_tombot_foglal( N );
/* A tömböt átadom a feltöltő függvénynek, illetve a tömb méretet a második paraméterben */
fibonacci_feltolt( fibonacci, N );
/* A tömböt átadom a kiíró függvénynek, illetve a tömb méretet a második paraméterben */
fibonacci_kiir( fibonacci , N );
return 0;
}
int* N_meretu_tombot_foglal( int x ){
/* Lefoglalok a fibonaccinak egy memóriaterülete ( paraméterben kapott méretűt ) */
/* Visszaadom */
return (( int * ) calloc ( x , sizeof( int ) ));
}
void fibonacci_feltolt( int * t, int x ){
/* Feltöltöm a paraméterben kapott tömböt a fibonacci sorozattal ( előző két elem összege egy ciklusban ) */
int i;
t[ 0 ] = 1;
t[ 1 ] = 1;
for( i = 2; i < x; i++ ){
t[ i ] = t[ i-2 ] + t[ i-1 ];
}
}
void fibonacci_kiir( int * t, int x ){
/* Bejárom a paraméterben kapott tömböt és a képernyőre írom soronként az elemeit */
int i;
for( i = 0; i < x; i++ ){
printf( "%d.fibonacci: %d\n" , i , t[ i ] );
}
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!