Kezdőoldal » Számítástechnika » Programozás » Miért nem működik ez a rekurzí...

Miért nem működik ez a rekurzív függvény C-ben?

Figyelt kérdés

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?



2017. okt. 29. 14:14
 1/9 A kérdező kommentje:
Gyökvonáshoz valószínűleg szar az egész függvény, csak nem értem, hogy számmal miért működik mégis, és változóval miért nem.
2017. okt. 29. 14:17
 2/9 A kérdező kommentje:
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. A függvény eleve rossz a hatványozáshoz, és néha se működik.
2017. okt. 29. 14:21
 3/9 A kérdező kommentje:
Akarom mondani a gyökvonáshoz, egyszerű hatványozáshoz jó.
2017. okt. 29. 14:23
 4/9 anonim ***** válasza:

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.

2017. okt. 29. 14:23
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:

"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.

2017. okt. 29. 14:30
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:

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.

2017. okt. 29. 14:35
 7/9 A kérdező kommentje:

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.

2017. okt. 29. 14:45
 8/9 sharkxxx ***** válasza:

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.

2017. okt. 29. 17:22
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:

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.

2017. okt. 30. 04:14

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!