ďťż

Ładny brzuch

#include <stdio.h> #include <conio.h> int szukaj(int tab[],int low, int i) {      if(low>tab[i]) {low=tab[i]; };      if(i<10)        {   i++;          szukaj(tab,low,i);          if (i==10) return(low);      }           } main() { int tab[10]={8,4,5,2,34,1,34,9,20,7}; int low,i,x;      low=tab[0];      i=0;      x=szukaj(tab,low,i);      printf("Najmniejsza wartosc to: %d", x);      getch();      return 0; }

funkcja szukaj zwraca 16384 zamiast 1, co dziwniejsze kolega mowi, ze w jego dev cpp ten sam kod dziala poprawnie. Skąd ten dziwny wynik?



proponuję zmienić funkcję szukaj na taką:

int szukaj(int tab[],int low, int i) {     for (int j=0; j<i; j++)         if (low>tab[j]) low=tab[j];     return low; }

Oraz przy wywolaniu pod "i" podstawic ilosc elementow tablicy "i=10"
Po co Ci rekurencja w tak prostej czynności?
Użytkownik Dann edytował ten post 16 listopad 2005, 00:49

proponuję zmienić funkcję szukaj na taką:

int szukaj(int tab[],int low, int i) {     for (int j=0; j<i; j++)         if (low>tab[j]) low=tab[j];     return low; }

oraz przy wywolaniu pod i podstawic ilosc elementow tablicy i=10

Zrób tak:
int szukaj(int tab[],int low, int i) {     if(low>tab[i]) {low=tab[i]; };     printf("=%d=",low);     if(i<10)       {   i++;         if (i==10) return(low);         else         return( szukaj(tab,low,i));     } }
Błąd polegał na tym, że najmniejsza wartość była znajdowana w 10 poziomie rekurencji (w dziesiątym wywołaniu funkcji szukaj) i przekazywana była nie do funkcji main a do wyższego poziomu rekurencji gdzie była marnowana. Chodzi o to żeby wynik przekazać przez wszystkie poziomy aż do pierwszego wywołania



dzieki, już widze ten błąd

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •