fork download
  1. #include <stdio.h>
  2.  
  3. void moveOneDisk(int from, int to) {
  4. printf("杭%dから杭%dに移動\n", from, to);
  5. }
  6.  
  7. void moveDisks(int from, int to, int n) {
  8. if (n == 1) {
  9. moveOneDisk(from, to);
  10. } else {
  11. int anotherPole = 6 - (from + to); // 1+2+3=6 を利用
  12. moveDisks(from, anotherPole, n - 1); // 上からn-1枚を別の杭へ
  13. moveOneDisk(from, to); // 一番下の円盤を目的地へ
  14. moveDisks(anotherPole, to, n - 1); // 別の杭にあるn-1枚を目的地へ
  15. }
  16. }
  17.  
  18. int main(void) {
  19. int n = 5;
  20. printf("%d枚の円盤を杭1から杭3に移動させる手順は以下のとおり:\n", n);
  21. moveDisks(1, 3, n);
  22. return 0;
  23. }
  24.  
Success #stdin #stdout 0.01s 5296KB
stdin
Standard input is empty
stdout
5枚の円盤を杭1から杭3に移動させる手順は以下のとおり:
杭1から杭3に移動
杭1から杭2に移動
杭3から杭2に移動
杭1から杭3に移動
杭2から杭1に移動
杭2から杭3に移動
杭1から杭3に移動
杭1から杭2に移動
杭3から杭2に移動
杭3から杭1に移動
杭2から杭1に移動
杭3から杭2に移動
杭1から杭3に移動
杭1から杭2に移動
杭3から杭2に移動
杭1から杭3に移動
杭2から杭1に移動
杭2から杭3に移動
杭1から杭3に移動
杭2から杭1に移動
杭3から杭2に移動
杭3から杭1に移動
杭2から杭1に移動
杭2から杭3に移動
杭1から杭3に移動
杭1から杭2に移動
杭3から杭2に移動
杭1から杭3に移動
杭2から杭1に移動
杭2から杭3に移動
杭1から杭3に移動