• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zasięg zmiennej w języku C. Ciąg Fibonacciego

Object Storage Arubacloud
0 głosów
446 wizyt
pytanie zadane 17 listopada 2017 w C i C++ przez rayman22 Użytkownik (710 p.)

Proszę zwrócić uwagę, że wprowadzam na początku kodu zmienne globalne. Dlaczego w fib2() za każdym razem wypluje mi program 1?

Przy okazji spytam, jak potem sprawdzić czas wykonania obu funkcji dla odpowiednio dużego n?

#include <stdio.h>
#include <stdlib.h>

int i;
int n;

long int fib(); /* rekurencyjna */
long int fib2(); /* iteracyjna */

int main()
{
    printf("Ktory element ciagu obliczyc?\n");
    scanf("%d", &n);

    return 0;
}

long int fib() /* rekurencyjna */
{
    if (n == 1 || n == 2)
        return 1;
    else
        return fib(n-1)+fib(n-2);
}

long int fib2() /* iteracyjna */
{
    if (n == 1 || n == 2)
        return 1;

    else {
        int f1=1; /* pierwsza zmienna */
        int f2=1; /* druga zmienna */
        int temp; /* zmienna pomocnicza */

        for(i = 3; i <= n; i++){
        temp = f1 + f2;
        f1 = f2;
        }

    printf("%d elementem ciagu Fibonacciego jest %d\n", n, f2);
    }
    return 0;
}

 

2 odpowiedzi

+2 głosów
odpowiedź 17 listopada 2017 przez criss Mędrzec (172,590 p.)
  • Nigdzie nawet wołasz ani fib ani fib2.
  • W C funkcje nie przyjmujące argumentów oznacza się przez podanie `void` w liście argumentów. long int fib(void);
  • Obie funkcje pracują na zmiennej globalnej (nie wiadomo dlaczego swoją drogą - tragiczny pomysł) i nie wyglądają jakby miały obsługiwać jakieś parametry a jednak próbujesz wołać je z argumentami (linia 23.). 
0 głosów
odpowiedź 17 listopada 2017 przez lambdag Obywatel (1,310 p.)
long int fib2(int n) /* iteracyjna */
{
    if (n == 1 || n == 2)
        return 1;
 
    else {
        int f1=1; /* pierwsza zmienna */
        int f2=1; /* druga zmienna */
        int temp; /* zmienna pomocnicza */
 
        for(i = 3; i <= n; i++){
        temp = f1 + f2;
        f1 = f2;
        f2 = temp;
        }
int main(void)
{
     int j;
     scanf("%d", &j);
     printf("%d", fib2(j));
     return 0;

}

 

Brakło ci czegoś w funkcji..

 

Podobne pytania

0 głosów
2 odpowiedzi 1,161 wizyt
pytanie zadane 7 marca 2017 w C i C++ przez Evelek Nałogowiec (28,960 p.)
0 głosów
1 odpowiedź 462 wizyt
pytanie zadane 7 lutego 2021 w C i C++ przez Piotrovsky Nowicjusz (170 p.)
0 głosów
2 odpowiedzi 2,101 wizyt
pytanie zadane 30 października 2020 w C i C++ przez forvev Początkujący (390 p.)

92,620 zapytań

141,474 odpowiedzi

319,813 komentarzy

62,004 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...