Search Menu



Problem : Write a function that takes the same arguments as TOH but instead of printing out the solution, returns the number of disc moves in solving the problem.

int count_TOH(int n, int p1, int p2, int p3)
	if (n>1) {
		return 1 + count_TOH(n-1, p1, p3, p2) + count_TOH(n-1, p3, p2, p1);
	} else return 1;

Problem : If the only change in the rules of the Towers of Hanoi problem were that you only had two poles instead of three, would the problem still be solvable?

No; you need a temporary pole to work with. With only two poles, you would be stuck after the first move.

Problem : If you have a problem that has a recurrence relation of T(n) = 2T(n/2) + 1, T(1) = 1 , what would be an appropriate big-O notation?


Problem : CHALLENGE: Write an iterative solution to the Towers of Hanoi problem.

void TOH(int n)
	int i;
	n = 1 << n;
	for (i = 1; i < n; i++) {
		printf("Move top disc from %d to %d.\n", 
			 (i&i-1)%3 + 1, 
			 ((i|i-1)+1)%3 + 1);
If n is odd, it moves the stack to the third pole, but if n is even, it moves the stack to the second pole.

Problem : In the iterative solution presented above, what is the purpose of the 1 << n? How does this relate to Towers of Hanoi?

Shifting the number 1 left by n is equivalent to doing 2n . Since we go through the following for loop from 1 to less than n , we're looping 2n - 1 times. This is the number of disk movements it takes to solve the Towers of Hanoi puzzle.

Marketing Management / Edition 15

Diagnostic and Statistical Manual of Mental Disorders (DSM-5®) / Edition 5