我知道遞歸是一種在函數本身內調用函數的技術。 但下面的代碼混淆了我它是如何能在第一遞歸之後做cout
部分:函數如何在遞歸之後執行一個動作?
(此代碼解決了河內難題塔)
#include <iostream>
using namespace std;
void move_rings(int n, int src, int dest, int other);
int main(void)
{
int rings;
cout << "Number of Rings: ";
cin >> rings;
move_rings(rings, 1, 3, 2);
system("PAUSE");
}
void move_rings(int rings, int source, int destination, int other)
{
if (rings == 1)
{
cout << "Move from " << source << " to " << destination << endl;
}
else
{
move_rings(rings - 1, source, other, destination);
cout << "Move from " << source << " to " << destination << endl;
move_rings(rings - 1, other, destination, source);
}
}
正如你所看到的,在功能move_rings
在if
聲明後自行調用。
當我想象這一點,我看到永無止境的循環......這怎麼可能對這個功能做
cout << "Move from " << source << " to " << destination << endl;
一部分?
程序的輸出是這樣的:
Move from 1 to 3
Move from 1 to 2
Move from 3 to 2
Move from 1 to 3
Move from 2 to 1
Move from 2 to 3
Move from 1 to 3
您是否使用了一些IDE(例如Eclipse)?如果是這樣,您可以使用調試器逐步完成程序,以更好地瞭解發生了什麼。學習如何使用調試器是一項基本技能,所以現在就開始吧。 –
謝謝你的提示,但我還是開始了編程though..I'll肯定很快 – Raven
研究它@Deanie - 請閱讀[編輯權限](http://stackoverflow.com/help/privileges/edit)尤其是關於「微小的,微不足道的修改令人沮喪的部分 - 嘗試在編輯時讓帖子顯着更好,糾正您觀察到的所有問題。」特別是,請記住,除非您有2,000位代表,否則每次編輯(甚至是微不足道的,僅用於標記的編輯)都需要最多5位其他用戶的投票。請進行編輯。 –