だから私は関数 moveSingleDisk() が呼び出された回数を数えたいのですが、私はそれを理解できないようです...このコードを使用して:
#include <iostream>
using namespace std;
void moveTower(int n, char start, char finish, char temp, int count);
void moveSingleDisk(char moveFrom, char moveTo, int count);
void calcHanoi(int n);
int main (int argc, const char * argv[])
{
calcHanoi(5);
return 0;
}
void calcHanoi(int n)
{
int count = 0;
moveTower(n, 'A', 'B', 'C', count);
}
void moveTower(int n, char start, char finish, char temp, int count)
{
if (n == 1)
{
count++;
moveSingleDisk(start, finish, count);
return;
}
moveTower(n-1, start, temp, finish, count);
count++;
moveSingleDisk(start, finish, count);
moveTower(n-1, temp, finish, start, count);
}
void moveSingleDisk(char moveFrom, char moveTo, int count)
{
cout << count << ": " << moveFrom << " -> " << moveTo << endl;
}
次の出力が得られます。
1: A -> B
1: A -> C
2: B -> C
1: A -> B
2: C -> A
2: C -> B
3: A -> B
1: A -> C
2: B -> C
2: B -> A
3: C -> A
2: B -> C
3: A -> B
3: A -> C
4: B -> C
1: A -> B
2: C -> A
2: C -> B
3: A -> B
2: C -> A
3: B -> C
3: B -> A
4: C -> A
2: C -> B
3: A -> B
3: A -> C
4: B -> C
3: A -> B
4: C -> A
4: C -> B
5: A -> B
私は問題を追跡しようとしましたが、再帰により、この種のものを追跡することは非常に困難になります (少なくとも私にとっては)。
どんな助けや説明も大歓迎です!ありがとうございました :)