Miért nem működik ez a rekurzív függvény C-ben?
double pow(double base, double power){
if (power == 0)
return 1;
return base * pow(base, power-1);
}
Van ez a függvény, amit ha meghívok így:
pow(50, 0.5);
működik szépen, de ha csinálok egy változót és azzal hívom meg, pl:
double x = 50;
pow(x, 0.5);
kifagy a program. Nem sikerült még rájönnöm, hogy miért, mivel elméletileg érték szerinti paraméterátadás történik, de lehet pont ez a gond?
Azért mert lebegőpontos számokat hasonlítasz == operátorral.
Ilyet soha nem csinálunk.
Valószínűleg amikor literált adsz át, akkor pontosabb értékkel számol a fordító és véletlenül pont működik a kód.
"Oké, meg van mi a hiba, a pow függvény már foglalt volt, amit nem gondoltam volna, mert math.h-t nem includeoltam"
Ez nem lehetett a gond, mert ez fordítási hibát okozna.
ma 14:30
Pedig ez volt a gond. Valamiért. Ha kitörlöm a függvényemet, de ugyanúgy használom a pow-t mintha még meg lenne (math.h nélkül), akkor a program azt az eredményt adja, amit várok tőle. Valószínűleg a compiler miatt, eleve meg lehet neki adva, hogy alap dolgokat, mint pow, meg malloc, stb... ismerjen fel library nélkül is.
In C, using a previously undeclared function constitutes an implicit declaration of the function. In an implicit declaration, the return type is int if I recall correctly. Now, GCC has built-in definitions for some standard functions. If an implicit declaration does not match the built-in definition, you get this warning.
To fix the problem, you have to declare the functions before using them; normally you do this by including the appropriate header.
Ez a rekurzív függvény akkor fejeződik be, ha "power" egyenlő 0-val (power == 0).
De ha a "power"-nek nem egész számot adol értékül, hanem 0.5-öt, akkor akárhányszor is hajtod végre a "power-1" műveletet, sose lesz a "power"-ből 0.
Ezért végtelenszer fogja akarni saját magát meghívni a függvény, és befagy a program.
tegnap 17:22
Tudom, eleve hibás hozzá, csak megzavart, hogy mégis működött, aminek az okát viszont fentebb leírtam.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!