Go4Expert (http://www.go4expert.com/)
-   Programming (http://www.go4expert.com/forums/programming-forum/)
-   -   help make my program recursive (http://www.go4expert.com/forums/help-program-recursive-t23663/)

 tfarmer4 25Oct2010 14:11

help make my program recursive

I am writing a program that will verify that a given set of moves on the Towers of Hanoi will end with a solution. I have written the code below for a 3 disk game, but I can't figure out how to make this code recursive. It is a really long piece of code considering its only for 3 disks. I'm pretty sure there is a way to make it recursive, but I am just stumped. Help will be greatly appreciated.

Code:

```#include <stdio.h> int tower1[3] = {1,2,3}; int tower2[3] = {0,0,0}; int tower3[3] = {0,0,0}; int moves[2][7] = {{1,1,2,1,3,3,1},                   {2,3,3,2,1,2,2}}; //set of moves //function to move the disks void moveDisk(int towerFrom, int towerTo) {     int temp = 0;     int i = 0;     int k = 2;     if(towerFrom == 1 && towerTo == 2) //take top disc from tower 1 and place on tower 2     {         while(i < 3)         {             if(tower1[i] != 0)             {                 temp = tower1[i];                 tower1[i] = 0;                 break;             }//end if             else                 i++;         }         while(k >= 0)         {             if(temp > tower2[k+1] && k <= 1)             {                 printf("Invalid move.");                 exit();             }             if(tower2[k] == 0)             {                 tower2[k] = temp;                 break;             }             else                 k--;         }     }         if(towerFrom == 1 && towerTo == 3)//take top disk from tower 1 and move to tower 3     {         i=0;         k=2;         while(i < 3)         {             if(tower1[i] != 0)             {                 temp = tower1[i];                 tower1[i] = 0;                 break;             }//end if             else                 i++;         }         while(k >= 0)         {             if(temp > tower3[k+1] && k <= 1)             {                 printf("Invalid move.");                 exit();             }             if(tower3[k] == 0)             {                 tower3[k] = temp;                 break;             }             else                 k--;         }     }     if(towerFrom == 2 && towerTo == 3)//take top disk from tower 2 and place on tower 3     {         i=0;         k=2;         while(i < 3)         {             if(tower2[i] != 0)             {                 temp = tower2[i];                 tower2[i] = 0;                 break;             }//end if             else                 i++;         }         while(k >= 0)         {             if(temp > tower3[k+1] && k <= 1)             {                 printf("Invalid move.");                 exit();             }             if(tower3[k] == 0)             {                 tower3[k] = temp;                 break;             }             else                 k--;         }     }     if(towerFrom == 2 && towerTo == 1)//take top disk from tower 2 and place on tower 1     {         i=0;         k=2;         while(i < 3)         {             if(tower2[i] != 0)             {                 temp = tower2[i];                 tower2[i] = 0;                 break;             }//end if             else                 i++;         }         while(k >= 0)         {             if(temp > tower1[k+1] && k <= 1)             {                 printf("Invalid move.");                 exit();             }             if(tower1[k] == 0)             {                 tower1[k] = temp;                 break;             }             else                 k--;         }     }     if(towerFrom == 3 && towerTo == 1)//take top disk from tower 3 and place on tower 1     {         i=0;         k=2;         while(i < 3)         {             if(tower3[i] != 0)             {                 temp = tower3[i];                 tower3[i] = 0;                 break;             }//end if             else                 i++;         }         while(k >= 0)         {             if(temp > tower1[k+1] && k <= 1)             {                 printf("Invalid move.");                 exit();             }             if(tower1[k] == 0)             {                 tower1[k] = temp;                 break;             }             else                 k--;         }     }     if(towerFrom == 3 && towerTo == 2)//take top disk off tower 3 and place on tower 2     {         i=0;         k=2;         while(i < 3)         {             if(tower3[i] != 0)             {                 temp = tower3[i];                 tower3[i] = 0;                 break;             }//end if             else                 i++;         }         while(k >= 0)         {             if(temp > tower2[k+1] && k <= 1)             {                 printf("Invalid move.");                 exit();             }             if(tower2[k] == 0)             {                 tower2[k] = temp;                 break;             }             else                 k--;         }     } } void main() { moveDisk(moves[0][0], moves[1][0]); system("pause"); printf("%d %d %d \n", tower1[0], tower2[0], tower3[0]); printf("%d %d %d \n", tower1[1], tower2[1], tower3[1]); printf("%d %d %d \n", tower1[2], tower2[2], tower3[2]); moveDisk(moves[0][1], moves[1][1]); system("pause"); printf("%d %d %d \n", tower1[0], tower2[0], tower3[0]); printf("%d %d %d \n", tower1[1], tower2[1], tower3[1]); printf("%d %d %d \n", tower1[2], tower2[2], tower3[2]); moveDisk(moves[0][2], moves[1][2]); system("pause"); printf("%d %d %d \n", tower1[0], tower2[0], tower3[0]); printf("%d %d %d \n", tower1[1], tower2[1], tower3[1]); printf("%d %d %d \n", tower1[2], tower2[2], tower3[2]); moveDisk(moves[0][3], moves[1][3]); system("pause"); printf("%d %d %d \n", tower1[0], tower2[0], tower3[0]); printf("%d %d %d \n", tower1[1], tower2[1], tower3[1]); printf("%d %d %d \n", tower1[2], tower2[2], tower3[2]); moveDisk(moves[0][4], moves[1][4]); system("pause"); printf("%d %d %d \n", tower1[0], tower2[0], tower3[0]); printf("%d %d %d \n", tower1[1], tower2[1], tower3[1]); printf("%d %d %d \n", tower1[2], tower2[2], tower3[2]); moveDisk(moves[0][5], moves[1][5]); system("pause"); printf("%d %d %d \n", tower1[0], tower2[0], tower3[0]); printf("%d %d %d \n", tower1[1], tower2[1], tower3[1]); printf("%d %d %d \n", tower1[2], tower2[2], tower3[2]); moveDisk(moves[0][6], moves[1][6]); system("pause"); printf("%d %d %d \n", tower1[0], tower2[0], tower3[0]); printf("%d %d %d \n", tower1[1], tower2[1], tower3[1]); printf("%d %d %d \n", tower1[2], tower2[2], tower3[2]); };```

 virxen 26Oct2010 12:04

Re: help make my program recursive

 All times are GMT +5.5. The time now is 21:04.