[Dodatkowe materiały] Funkcje (rekurencja)
Ostatnio zmodyfikowano 2017-07-09 22:39
PCS Temat założony przez niniejszego użytkownika |
[Dodatkowe materiały] Funkcje (rekurencja) » 2017-07-08 17:41:49 Witam, mam pewien problem ze zrozumieniem kodu: / Odliczanie inne spojrzenie przyk ł ad z kursu 8.2 #include <conio.h> #include <iostream> void Odliczanie( int i );
int main() { Odliczanie( 10 ); getch(); return 0; } void Odliczanie( int i ) { using std::cout; cout << "Rakieta startuje za " << i << " sek.\n"; if( i > 0 ) Odliczanie( i - 1 ); cout << i << ". Start zgodny z planem\n"; }
Nie rozumiem ostatniej fazy kodu, to znaczy gdy odliczanie dojdzie do 0, a potem zaczyna się linijka cout << i << ". Start zgodny z planem\n"; - Nie czaje dlaczego ta linia i wszystkie pod nią (jakby były) są zapętlone, a górna część kodu już nie. |
|
maly7 |
» 2017-07-08 18:00:34 void Odliczanie( int i ) { using std::cout; cout << "Rakieta startuje za " << i << " sek.\n"; if( i > 0 ) Odliczanie( i - 1 ); else cout << i << ". Start zgodny z planem\n"; } Funkcja wywołuje samą siebie dopóki 'i' (przekazywana jako argument) nie dojdzie do 0. Tak działa rekurencja. Za każdym razem jako argument wstawiana jest zmienna i-1, jeśli byłoby samo i to byłaby to "pętla" nieskończona :D |
|
PCS Temat założony przez niniejszego użytkownika |
» 2017-07-09 10:45:58 Tak, tylko chodzi mi o to, czemu gdy argument dojdzie do 0 nie wyswietlana jest gorna czesc kodu (przeciez ona w ifie nie jest), tylko ta jedna na samym dole. |
|
Luq |
» 2017-07-09 11:20:53 Jak nie jest wyświetlana górna część kodu? Przecież program wypisze Rakieta startuje za 0 sek. |
|
PCS Temat założony przez niniejszego użytkownika |
» 2017-07-09 11:47:51 Rakieta startuje za 10 sek. Rakieta startuje za 9 sek. Rakieta startuje za 8 sek. Rakieta startuje za 7 sek. Rakieta startuje za 6 sek. Rakieta startuje za 5 sek. Rakieta startuje za 4 sek. Rakieta startuje za 3 sek. Rakieta startuje za 2 sek. Rakieta startuje za 1 sek. Rakieta startuje za 0 sek. 0 Start zgodny z planem 1 Start zgodny z planem 2 Start zgodny z planem 3 Start zgodny z planem 4 Start zgodny z planem 5 Start zgodny z planem 6 Start zgodny z planem 7 Start zgodny z planem 8 Start zgodny z planem 9 Start zgodny z planem 10 Start zgodny z planem
Gdy "rakieta startuje za 0 sek." - od tego momentu zaczyna się tylko jeden strumień wyjściowy, czyli ta linijka: cout << i << ". Start zgodny z planem\n"; A w moim toku rozumowania powinna się wykonywać także ta: cout << "Rakieta startuje za << i << " sek.\n "; [/cpp][/code] - czemu ten strumień wyjściowy nie jest uwzględniany, skoro funkcja wywoluje samą siebie to i ta gorna część też powinna byc zawarta w konsoli.[/code]
Ma ł y, tam nie ma else, sp ó jrz: http:
|
|
Luq |
» 2017-07-09 12:24:41 Gdy argument dojdzie do 0, funkcja przestaje wywoływać samą siebie i wszystkie wcześniejsze wywołania po kolei wracają wykonując resztę kodu tej funkcji, czyli w tym przypadku cout << i << ". Start zgodny z planem\n"; |
|
PCS Temat założony przez niniejszego użytkownika |
» 2017-07-09 22:39:47 Aha, no to tak myslalem, ok dzięki. |
|
« 1 » |