Türme von Hanoi



  • Hi, kann mir vielleicht jemand erklären, warum das Funktioniert?

    void bewegen(int n, int quelle, int ziel, int zwischen) {
    	if (n > 0) { // Abbruchbedingung: n == 0
    		n--;
    		bewegen(n, quelle, zwischen, ziel); // rekursiver Aufruf
    		cout << "Bringe eine Scheibe von " << quelle
    			<< " nach " << ziel << endl;
    		bewegen(n, zwischen, ziel, quelle); // rekursiver Aufruf
    	}
    }
    
    int main() {
    	cout << "Tuerme von Hanoi! Anzahl der Scheiben: ";
    	int scheiben;
    	cin >> scheiben; // 4 scheiben = 15 Durchläufe
    	bewegen(scheiben, 1, 2, 3);
    

    Bei 4 Scheiben läuft die Sache 15 mal und ich hab es nachgestellt und es ist sogar richtig. Ich blicke nur nicht durch, warum das überhaupt so oft läuft. warum wird n nicht 4 mal runter gezählt? Also wenn die Geschichte nur 8 mal laufen würde, weils ja 2 rekursive Aufrufe gibt, würde ichs ja vielleicht noch nachvollziehen können, oder 12, wenn man annimmt das der erste Aufruf aus der main heraus jedes mal wieder mit aufgerufen wird. Also ich bin glaub ich zu doof dafür 😕
    LG



  • Türme von Hanoi sollte dir das Verständnis dafür bringen.


Log in to reply