Fish Fish - 4 months ago 52
C Question

Update Move Count (Counter) - Towers of Hanoi - C program

I wrote this C program for moving a number of disks (n) from peg A to peg C while tracing the path. However, I do not know how/where to put a count call/ increment so that the total number of moves is kept track of and printed out at the end. Any advice would be appreciated. (Originally I had it printing in the TOH function, which did not work so I removed the printf(..) line)
I changed the variables so it would increase readability; however, the count output is way off. For number of plates = 3, count = 239. For number of plates 4, count = 130,431

#include <stdio.h>
int TOH(int,char,char,char);
int main()
{
int n;
printf("\nEnter number of plates:");
scanf("%d",&n);
int c = TOH(n,'A','C','B');
printf("\n");
printf("Total number of moves = %d \n ", c);
return 0;
}
int TOH(int n,char first,char third,char second)
{
int count;
if(n>0){
count=TOH(n-1, first, second, third);
printf("Move disk %d from peg %c to peg %c\n", n, first, third);
count++;
count+= TOH(n-1, second, third, first);
}
return count;
}

Answer

Return the value of the count from your function to the main. For this you have to call it from main as

int c = TOH(n,'A','C','B');  

and change return type of your function to int.

int TOH(int,char,char,char);  

I changed your function a little bit:

int TOH(int n,char x,char y,char z)
{
   int count = 0;
   if(n>0){
       count = TOH(n-1, x, z, y);
       printf("\nMove disk %d from peg %c to peg %c\n", n, x, y);
       count++;
       count += TOH(n-1, z, y, x) ;
   }
   return count;
}
Comments