[C] Rekurencja, wyjaśnienie programu

kony03
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 6 maja 2014, o 19:16
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 1 raz

[C] Rekurencja, wyjaśnienie programu

Post autor: kony03 »

Witam! Mam problem z tym zadaniem - nie do końca rozumiem wywołanie funkcji rekurencyjnej. Gdyby ktoś zechciał mi wyjaśnić, to resztę przykładów ogarnąłbym sam. Nie mam pojęcia dlaczego wynik wychodzi : \(\displaystyle{ 1 2 1 3 1 2 1}\)

Kod: Zaznacz cały

#include <stdio.h>
void notail(int n){
if(n>0){
notail(n-1);
printf("%d	", n);
notail(n-1);

}
}
int main(){
notail(3);
return 0;
}
Ostatnio zmieniony 23 cze 2014, o 07:58 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C] Rekurencja, wyjaśnienie programu

Post autor: kalwi »

włącz sobie debuger i prześledź jak się wykonuje program (i dobrze ustawić watcha na n oraz n-1)
Andreas
Użytkownik
Użytkownik
Posty: 1130
Rejestracja: 1 lis 2008, o 22:33
Płeć: Mężczyzna
Podziękował: 72 razy
Pomógł: 156 razy

[C] Rekurencja, wyjaśnienie programu

Post autor: Andreas »

Musisz chwilę nad tym posiedzieć i przeanalizować.
Mniej więcej tak to wygląda.

Kod: Zaznacz cały

notail(3)
	notail(2)
		notail(1)
			notail(0)
				tu nic się nie wykona,
				więc wracamy poziom wyżej
			wypisz "1"
		wypisz "2"
		notail(1)
			wypisz "1"
	wypisz "3"
	notail (2)
		notail(1)
			notail(0)
				tu nic się nie wykona,
				więc wracamy poziom wyżej
			wypisz "1"
		wypisz "2"
		notail(1)
			wypisz "1"
kony03
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 6 maja 2014, o 19:16
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 1 raz

[C] Rekurencja, wyjaśnienie programu

Post autor: kony03 »

Super, bardzo dziękuję za odpowiedź ! Już biorę się za analizę Pozdrawiam !
ODPOWIEDZ