私は、再帰は関数自体の中で関数を呼び出す手法であることを知っています。 しかし、以下のコードは、最初の再帰後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など)を使用していますか?そうであれば、デバッガを使用して、何が起こっているのかをよりよく理解するために、プログラムを段階的に調べることができます。デバッガを使用する方法を学ぶことは不可欠なスキルなので、今すぐ始めることもできます。 –
ヒントありがとうございますが、まだプログラミングを始めています。私は間もなくそれをすぐに学ぶでしょう – Raven
@Deanie - [編集権限](http://stackoverflow.com/help/privileges/edit)をお読みください。ページ、特に「小さな、些細な編集はお勧めできません。あなたが観察したすべての問題を修正して、投稿を著しく改善しようとしています。特に、2,000人の議員がいるまでは、それぞれの編集(些細なタグのみの編集でさえ)は最大5人の他のユーザーからの投票が必要です。編集回数をカウントしてください。 –