Rekurzia

Programovacie jazyky, rady, poradňa...
Mr-Freek
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 469
Registrovaný: 14 júl 2014, 13:23

Rekurzia

Príspevok od používateľa Mr-Freek »

Zdravíčko, je správne použiť rekurziu takým štýlom že sa pri dosiahnutí bázového problému nevynorím s5??

Príklad: program porovnáva tanečné páry, vždy prvá a posledná vlastnosť (výška, pohlavie) musia vyhovovať podmienke. Ja som sa rekurzívne vnoril až po posledné 2 členy a ak podmienky aj vtedy platili returnol True.. je to správny postup ak som sa nevynáral späť??

Problém som MUSEL riešiť za pomoci rekurzie tak aby som si náhodou nespravil handu :) díky moc
Spoiler

Kód: Vybrať všetko

def dancers(heights, genders):
	if (heights[0] > heights[-1]) and (genders[0] == "boy") and (genders[-1] == "girl"):
		if len(heights) == 2:
			return True
		else:
			return dancers(heights[1:-1], genders[1:-1])
	else:
		return False

print dancers([168, 193, 200, 170, 160, 150], ["boy", "boy", "boy", "girl", "girl", "girl"]) # True
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8216
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Rekurzia

Príspevok od používateľa harrison314 »

Mr-Freek napísal:Zdravíčko, je správne použiť rekurziu takým štýlom že sa pri dosiahnutí bázového problému nevynorím s5??
Kratka odpoved - ano.
Dlha - ved ty sa vracias spät.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Rekurzia

Príspevok od používateľa audiotrack »

tiež som mu chcel už včera večer napísať, že je smutné, že nevie čo robí jeho program, ale nechcelo sa mi to vypisovať z mobilu. Akonáhle tam máš return, tak aj ten čo nevie programovať si domyslí, že sa asi vraciaš. To že návratovú hodnotu nespracuješ je už druhá vec. Keby si sa nemal vracať, bolo by tam natvrdo skončenie (exit a pod.) alebo skok do inej metody ktorá už pokračuje nerekurzívne

harrison: prečo si myslíš že je to správne? Ja by som sa prikláňal k tomu, prerobiť to tak, aby sa vždy vrátil. Inak si zaprace stack rekurzívnymi volaniami a pokračuje vo vykonávaní programu bez toho aby ho vyprázdnil. Navyše sa tam trošku stráca pointa rekurzie a príde mi to ako zlý návrh, lebo to smrdí kodom ktorý mal byť cyklus a nie rekurzia
Mr-Freek
Medium Star
Medium Star
Používateľov profilový obrázok
Príspevky: 469
Registrovaný: 14 júl 2014, 13:23

Re: Rekurzia

Príspevok od používateľa Mr-Freek »

ja si myslím že viem čo ten program robí ale pod vracaním sa som mal na mysli presne to čo popisuje audiotrack. Teda spracovanie návratovej hodnoty, nevedel som či rekurzia znamená len volať funkciu vo funkcií alebo musí aj tá volaná funkcia vracať output pre tú ktorá ju volala. Ja by som to cez loop aj spravil lenže mám použiť rekurziu, ak ale toto nie je správne použitie tak ten program prerobím, ďakujem a ospravedlnujem sa za nepresné vyjadrovanie :)

//autoeditácia príspevku (07 Dec 2015, 20:12)
je toto riešenie lepšie?? resp. je to už rekurzia v pravom slova zmysle? príde mi to zbytočne zložité riešenie ale to možno pretože som predtým vždy používal cykli a nie rekurziu :D na druhej strane mám sa to naučiť tak prečo nie
Spoiler

Kód: Vybrať všetko

def dancers(heights, genders):
	if (len(heights) == 2):
		if (heights[0] > heights[-1]) and (genders[0] == "boy") and (genders[-1] == "girl"):
			return True
		else:
			return False
       
	if dancers(heights[1:-1], genders[1:-1]) and (heights[0] > heights[-1]) and (genders[0] == "boy") and (genders[-1] == "girl"):
		return True
	else:
		return False
Napísať odpoveď