Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Dodatkowe materiały] Funkcje (rekurencja)

Ostatnio zmodyfikowano 2017-07-09 22:39
Autor Wiadomość
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:
C/C++
/ 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.
P-163132
maly7
» 2017-07-08 18:00:34
C/C++
void Odliczanie( int i )
{
    using std::cout;
    cout << "Rakieta startuje za "
    << i << " sek.\n";
    if( i > 0 )
         Odliczanie( i - 1 ); // tutaj rekurencja
    else // tutaj nie powinno być 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
P-163134
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.
P-163146
Luq
» 2017-07-09 11:20:53
Jak nie jest wyświetlana górna część kodu? Przecież program wypisze
Rakieta startuje za 0 sek.
P-163149
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:
C/C++
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: //cpp0x.pl/kursy/Kurs-C++/Funkcje-kolejne-aspekty/306
P-163150
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";
P-163153
PCS
Temat założony przez niniejszego użytkownika
» 2017-07-09 22:39:47
Aha, no to tak myslalem, ok dzięki.
P-163159
« 1 »
  Strona 1 z 1