Ĺ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
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