Program źle wyznacza ciąg fibanacciego

0
#include <stdio.h>

int main()
{
    int fib[100];
    fib[0] = 1;
    fib[1] = 1;

    for(int i = 2; i < 100; i++)
    {
        fib[i] = fib[i - 1] - fib[i - 2];
    }
    for(int i = 0; i < 100; i++)
    {
        printf("%d wyraz ciagu to: %d\n",i,fib[i]);
    }
}
 

Dlaczego wypisując potem te poszczególne elementy tablicy dostaje 1, -1,0?
W języku C++ udało się , a tutaj coś nie tak.

4

Bo masz odejmowanie zamiast dodawania tu:

 fib[i] = fib[i - 1] - fib[i - 2];
0

Przy okazji, używanie int do obliczania wartości ciągu Fibonacciego dalszej niż czterdziesta szósta nie ma sensu na architekturach z 32-bitowym intem.

0

Kolejna rzecz, to przy wyliczeniu danego wyrazu możesz od razu wypisać go na ekran. Druga iteracja stanie się zbędna

0
fib[i] = fib[i - 1] - fib[i - 2];

powodzenia życzę :)

x1 = 1
x2 = 1
x3 = x2 - x1  =>  1 -  1 =  0
x4 = x3 - x2  =>  0 -  1 = -1
x5 = x4 - x3  => -1 -  0 = -1
x6 = x5 - x4  => -1 - -1 =  0
x7 = x6 - x5  =>  0 - -1 =  1
x8 = x7 - x6  =>  1 -  0 =  1
x9 = x8 - x7  =>  1 -  1 =  0
x10 = x9 - x8 =>  0 -  1 = -1
itd
0

Pierwszy wyraz jest równy 0, drugi jest równy 1, każdy następny jest sumą dwóch poprzednich.
Ty nie masz sumy tylko różnicę, więc jak to ma niby działać?

0
#include <stdio.h>
long fibonacci(long f);
int main(void)
{
	int a;
	printf("Podaj wyraz ciagu Fibonacci: ");
	scanf("%d", &a);
	printf("Wyraz %d ciagu Finonacci'ego wynosi %d", a, fibonacci(a));
	getchar();
	getchar();
	return 0;
}

long fibonacci(long f)
{
	int g=1, h=1, licznik=3;
	long i;
	if (f>2)
	{
		while (licznik<=f)
		{
			i=g+h;
			g=h;
			h=i;
			licznik++;
		}
		return i;
	}
	else
	return 1;
}
1
xpeye napisał(a):

Ja tylko pokazałem, że też tak można - poprzez iterację

#include <stdio.h>

unsigned long long fibonacci(unsigned short n)
  {
   unsigned long long a,b,c;
   for(a=b=c=1;(n--)>=2;a=b,b=c) c=a+b;
   return c;
  }
  
int main()
  {
   unsigned short i;
   for(i=0;i<=92;++i) printf("f(%hu) -> %llu\n",i,fibonacci(i));
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1