Kezdőoldal » Számítástechnika » Programozás » Rekurziv C fuggvenyt szeretnek...

De'Ve' kérdése:

Rekurziv C fuggvenyt szeretnek irni ami visszateritti egy parameterkent kapott termeszetes szam legkissebb szamjegyet. Pl.234512 => 1. Valaki 1 kodal kisegittene?

Figyelt kérdés
Szeretnem latni hogy megertsem.
2012. jún. 14. 15:33
 1/10 anonim ***** válasza:
44%
Első hívás után egyjegyű számod van. Ha erre rekurzív meghívod újra a függvényt, akkor a végtelenségig ugyanazt a számjegyet adja vissza, végtelen ciklusba kerülsz. A feladat értelmetlen, vagy rosszul van megfogalmazva.
2012. jún. 14. 15:58
Hasznos számodra ez a válasz?
 2/10 iostream ***** válasza:

int Rekurz(int num, int min)

{

if (0 == num)

return min;

if (min > num % 10)

min = num % 10;

int tmp = Rekurz(num / 10, min);

if (min > tmp)

return tmp;

else

return min;

}


Rekurz(szam, 10), így kell meghívni. Ha a természetes számokat 1-től vesszük, egyébként a 0 külön eset.

2012. jún. 14. 16:09
Hasznos számodra ez a válasz?
 3/10 anonim ***** válasza:

2 paraméter kell az egyik paraméter maga a szám aminek a legkisebb számjegyét keressük, a másik paraméter az eddig a jelenleg talált legkisebb szám. A függvény meghívása így fest: legkissebbszamjegy(234512,9).

Az első paraméterbe kapott számot utolsó számjegy nélkül azaz 10-el osztva (maradékosan) adja tovább és a visszatérési érték ez és a 234512 szám utolsó számegyének minimuma.

Mint tisztán matematikailag megfogalmazva ez a függvény, ahol nincsenek ciklusok, a változók nincsenek (pontosabban más értelembe vannak, és nem változnak) Persze ettől el lehet térni c-ben.

2012. jún. 14. 16:16
Hasznos számodra ez a válasz?
 4/10 anonim ***** válasza:

Az én megoldásom, a matematikai megközelítésem analógiájára, (0-nál nagyobb számokra működik csak)


int min(int a,int b){

return (a<b) ? a : b;

}


int legkisebbszamjegy(int szam,int eddigilkj){

if (szam>0){

return min(legkisebbszamjegy(szam/10,eddigilkj),min(eddigilkj,szam % 10));}

}

------------

Vagy külön min fgv nélkül (áttekinthetetlenebb, de ugyan az lényegébe):

int legkisebbszamjegy(int szam,int eddigilkj){

if (szam>0){

return ((legkisebbszamjegy(szam/10,eddigilkj)<((eddigilkj<szam % 10) ? eddigilkj : szam % 10)) ? legkisebbszamjegy(szam/10,eddigilkj) : ((eddigilkj<szam % 10) ? eddigilkj : szam % 10));}

}

2012. jún. 14. 16:21
Hasznos számodra ez a válasz?
 5/10 iostream ***** válasza:

3. válaszoló nyomán:


#define MIN(a, b) ( ((a) < (b)) ? (a) : (b) )


int Rekurz(int num, int min)

{

if (10 > num)

return MIN(min, num);

return MIN(min, Rekurz(num / 10, MIN(num % 10, min)));

}


Nem a leghatékonyabb (temporális változó nélkül dolgozik, emiatt kétszer hívhatja a Rekurz függvényt), de funkcionális programozás szempontjából "szép".

Funkcionális programozás ahol a függvények matematikai értelemben vett függvények, azaz nincs mellékhatásuk.

2012. jún. 14. 16:24
Hasznos számodra ez a válasz?
 6/10 anonim ***** válasza:

"return ((legkisebbszamjegy(szam/10,eddigilkj)<((eddigilkj<sza ..."

Ez egy sor a ";"-ig csak szétszedte az ez az oldal.

2012. jún. 14. 16:25
Hasznos számodra ez a válasz?
 7/10 iostream ***** válasza:
És valóban, nem is tudom miért nem gondoltam rá, hogy a min lehet függvény is. Valami olyasmi járt a fejemben, hogy C-ben nincs inline kulcsszó... mindenesetre +1 rekurzív hívásnál biztos olcsóbb egy két intes függvény meghívása, így igen, a min legyen függvény.
2012. jún. 14. 16:27
Hasznos számodra ez a válasz?
 8/10 anonim ***** válasza:

@16:24 iostream

Matematikailag nem számít hogy 2x van meghívva... bár lehetett volna temporális változót használnom(de ez nem volt célom) mert nem sérti a funkcionális paradigmát. Egy funkcionális kiértékelő rendszer lehet olyan "okos" hogy 1x számolja ki, hiába így írom (ezt nem a c-re értem)


"#define MIN(a, b) ( ((a) < (b)) ? (a) : (b) )"

Nagyon jó! (Kevesebb zárójellel) én is így írtam, csak a preprocesszált kódot írtam ide, hátha valaki észreveszi hogy így is lehetne.

2012. jún. 14. 16:36
Hasznos számodra ez a válasz?
 9/10 _Jessy_ ***** válasza:
Miért kell ehhez rekurzió? Gyakorolni inkább olyan példával érdemes, ahol értelme is van a dolognak.
2012. jún. 14. 17:59
Hasznos számodra ez a válasz?
 10/10 A kérdező kommentje:
Kosszonom:D
2012. jún. 15. 05:53

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!