The problem with the fibonacci function. C ++

Should return the location of the narray. But instead of value, I get only 0.

int fibonacci(int n)
{
    int f[100];
    f[0] = 0;
    f[1] = 1;

    for (int i=2; i<n; i++)
    {
        f[i] = f[i-2] + f[i-1];
    }

    return f[n];
}

int main()
{
    cout << fibonacci(3);
    return 0;
}

New CODE:

A new problem, returning one number further, and then should. For example, if "n == 7", then its return "13" is not "8", as it should be.

int fibonacci(int n)
{
    int f[100] = { 0, 1 };

    for (int i=2; i<=n; i++)
    {
        f[i] = f[i-2] + f[i-1];
    }

    return f[n-1];
}

int main()
{
    cout << fibonacci(7);
    return 0;
}
+3
source share
7 answers

well, you never install f[n], you only go to i < n, that is i == n-1. try to returnf[n-1]

EDIT: as Chris Lutz said, my answer does not fit, as it would give an invalid result if you called fibonacci(0)

, i <= n
, , , fibonacci(3) 3- , 4-, fibonacci(0) , f[n-1]... - n==0 - , n<0 n>100.

f[n-1], :

int fibonacci(int n)
{
    int f[100] = { 0, 1 };

    if ((n <= 0) || (n > 100))
        return -1;//return some invalid number to tell the caller that he used bad input

    for (int i=2; i < n; i++) // you can use i < n here
    {
        f[i] = f[i-2] + f[i-1];
    }

    return f[n-1];
}
+4

. , , , .

+4

n- . f [n], n-1.

+3

, i < n ( n == 3 ), f[3], . , , .

"<" "<=".


# 1

.

#include <iostream>
using namespace std;

static int fibonacci(int n)
{
    int f[100] = { 0, 1 };

    if (n < 0 || n > 100)
        return -1;
    else if (n < 2)
        return f[n];

    for (int i = 2; i <= n; i++)
    {
        f[i] = f[i-2] + f[i-1];
        //cout << "f[" << i << "] = " << f[i] << endl;
    }

    return f[n];
}

int main()
{
    for (int i = 0; i < 8; i++)
        cout << "fib(" << i << ") = " << fibonacci(i) << endl;
    return 0;
}

# 1

fib(0) = 0
fib(1) = 1
fib(2) = 1
fib(3) = 2
fib(4) = 3
fib(5) = 5
fib(6) = 8
fib(7) = 13

# 2

3, :

#include <iostream>
using namespace std;

static int fibonacci(int n)
{
    int f[3] = { 0, 1, 0 };

    if (n < 0 || n > 100)
        return -1;
    else if (n < 2)
        return f[n];

    for (int i = 2; i <= n; i++)
    {
        f[i%3] = f[(i-2)%3] + f[(i-1)%3];
        //cout << "f[" << i << "] = " << f[i%3] << endl;
    }

    return f[n%3];
}

int main()
{
    for (int i = 0; i < 8; i++)
        cout << "fib(" << i << ") = " << fibonacci(i) << endl;
    return 0;
}

- .

№ 3

:

#include <iostream>
using namespace std;

static int fibonacci(int n)
{
    int f0 = 0;
    int f1 = 1;

    if (n < 0 || n > 46)
        return -1;
    else if (n == 0)
        return f0;
    else if (n == 1)
        return f1;

    int fn;
    for (int i = 2; i <= n; i++)
    {
        int fn = f0 + f1;
        f0 = f1;
        f1 = fn;
        //cout << "f[" << i << "] = " << fn << endl;
    }

    return f1;
}

int main()
{
    for (int i = -2; i < 50; i++)
        cout << "fib(" << i << ") = " << fibonacci(i) << endl;
    return 0;
}

46 32- .

# 3

fib(-2) = -1
fib(-1) = -1
fib(0) = 0
fib(1) = 1
fib(2) = 1
fib(3) = 2
fib(4) = 3
fib(5) = 5
fib(6) = 8
fib(7) = 13
fib(8) = 21
fib(9) = 34
fib(10) = 55
fib(11) = 89
fib(12) = 144
fib(13) = 233
fib(14) = 377
fib(15) = 610
fib(16) = 987
fib(17) = 1597
fib(18) = 2584
fib(19) = 4181
fib(20) = 6765
fib(21) = 10946
fib(22) = 17711
fib(23) = 28657
fib(24) = 46368
fib(25) = 75025
fib(26) = 121393
fib(27) = 196418
fib(28) = 317811
fib(29) = 514229
fib(30) = 832040
fib(31) = 1346269
fib(32) = 2178309
fib(33) = 3524578
fib(34) = 5702887
fib(35) = 9227465
fib(36) = 14930352
fib(37) = 24157817
fib(38) = 39088169
fib(39) = 63245986
fib(40) = 102334155
fib(41) = 165580141
fib(42) = 267914296
fib(43) = 433494437
fib(44) = 701408733
fib(45) = 1134903170
fib(46) = 1836311903
fib(47) = -1
fib(48) = -1
fib(49) = -1
+2

n - , . < < = for. ( f [n], n , .)

int fibonacci(int n)
{
    int f[100];
    f[0] = 0;
    f[1] = 1;

    for (int i=2; i<=n; i++)
    {
        f[i] = f[i-2] + f[i-1];
    }

    return f[n];
}

int main()
{
    cout << fibonacci(3);
    return 0;
}

, , . . - :

int a = 0;
int b = 1;

for (int i=2; i<=n; i++)
{
    b = a + b;
    a = b;
}

return b;
+2

fibonacci(3) for ( ) i < 3...

, f[2]. f[3], ( , ).

+1

Don't you mean return f [n-1];

I think your compiler set the array f [100] to 0?

Looks like the other guy has the correct answer ....

0
source

Source: https://habr.com/ru/post/1778396/


All Articles