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

Wieże Hanoi - Rekurencja

Ostatnio zmodyfikowano 2013-11-23 12:30
Autor Wiadomość
pekfos
» 2013-11-21 20:38:38
main() wywołuje f(5), które 2 razy wyświetla 5. Przed wyświetleniem drugiego 5, f(5) wywołuje f(4), które wyświetla 2 razy 4, itd, aż do wywołania przez f(0), które nic nie robi.
P-96988
barti2287
Temat założony przez niniejszego użytkownika
» 2013-11-22 10:22:57
Próbowałem sobie uporządkować ten mój kod... Wyszło mi (mam przynajmniej taką nadzieję) w połowie. Utknąłem i nie wiem jak dalej go przeanalizować. Dokonałem w moim kodzie takiej zmiany, że zamiast wyświetlać A i C, wyświetla po prostu lk (jak najpierw przeanalizuję ten wariant, to będę wiedział chociaż jakie kroki mój program wykonuje i łatwiej mi będzie zinterpretować te zamiany miejscami argumentów).

Oto lista, która pokazuje część działania programu. Proszę o podpowiedź czy jest poprawna i co znajdzie się dalej.

1. Wywołanie funkcji "hanoi" dla lk=3.
2. Wykonanie 1, lk=2.
3. Wykonanie 2, lk=1.
4. Wyświetlenie lk dla 2 wykonania ( lk=1 ).
5. Wyświetlenie lk dla 1 wykonania ( lk=2 ).
6. Wykonanie 2 (chodzi o ilość "zapętleń"), lk=1.
7. Wyświetlenie lk dla 2 wykonania (1).

Program po uruchomieniu zwraca liczby: 1, 2, 1, 3, 1, 2, 1. A to jest kod:

C/C++
#include <iostream>
#include <conio.h>

using namespace std;

// Funkcja rozwiązująca rekurencyjnie zagadkę wież hanoi.
void hanoi( int lk, char A, char B, char C )
{
    if( lk > 0 )
    {
        hanoi( lk - 1, A, C, B ); // Przekłada lk-1 krążków ze źródłowej wieży (A) na pomocniczą (B) przy użyciu wieży docelowej (C).
        //cout << A << " --> " << C << endl; // Wyświetla ruch w konsoli.
        cout << lk << endl;
        hanoi( lk - 1, B, A, C ); // Przekłada lk-1 krążków z pomocniczej wieży (B) na docelową (C) przy użyciu wieży źródłowej (A).
    }
}

int main()
{
    int lk; // Liczba krążków
    cin >> lk;
    cout << endl;
   
    hanoi( lk, 'A', 'B', 'C' ); // Wywołanie funkcji "hanoi".
    getch();
    return 0;
}
P-97032
barti2287
Temat założony przez niniejszego użytkownika
» 2013-11-23 12:30:23
Udało mi się to wszystko zrozumieć! W końcu... Dziękuję wszystkim za pomoc.
P-97115
1 « 2 »
Poprzednia strona Strona 2 z 2