👤

In C++.Se consideră un număr natural K. Să se scrie o funcţie recursivă pentru a determina cel
mai
mic număr al şirului Fibonacci care î-l depăşeşte pe K.
Şirul Fibonacci se defineşte astfel: X 0 = 0; X 1 =1; X n =X n-1 + X n-2 ( n 2).

Eu am facut asa, dar nu imi arata rezultatul dorit.
#include
using namespace std;
int a[100], i, nr;
int fib(int n)
{
if(n==1 || n==2)
return 1;
else
return fib(n-1)+fib(n-2);
}
int minim(int k, int nr)
{
i=nr;
if(a[i]>k || a[i-1] {
return a[i];
}
else
nr--;
return minim(k,nr);
}
int main()
{
int n, k;
cout << "n="; cin >> n;
for(i=1;i<=n;i++)
{
a[i]=fib(i);
}
for(i=0;i<=n;i++)
cout << a[i] << " ";
cout << endl;
cout << "k="; cin >> k;
cout << "numarul minim:" << minim(k,nr);
return 0;
}


Răspuns :

Răspuns:

C++:

int n, i = 2, f1 = 0, f2 = 1, c;

 cin >> n;

 

 while (i <= n)

 {

   c = f1 + f2;

   f1 = f2;

   f2 = c;

   i++;

 }

 if (n<=1)

   cout<<n;

 else

   cout << c;

Pascal:

var

k, i: integer;

function fib(n: integer): longint;

begin

if (n = 1) or (n = 2) then  

fib := 1

else

fib := fib(n - 1) + fib(n - 2);

end;

begin

readln(k);

i := 1;

while(fib(i) <= k) do  

begin

i := i + 1;

end;

writeln(fib(i));

end.

Răspuns:

cu recursie...

Explicație:

#include <iostream>

using namespace std;

int K, x,y;

int caut(int &a, int &b)

{

  if (a+b>K) return a+b;

  else

   {

       int c=a+b;

       a=b; b=c;

       caut(a,b);

   }

}

int main()

{

   cin >> K;

   x=0; y=1;

   cout << caut(x,y);

}