Solved

# Odd function declaration in Tower of Hanoi Solution

Posted on 2004-10-31
385 Views
Hi,

I was recently looking for a recursive solution to the "Tower of Hanoi" problem, and I came across this:

void move(n, A, C, B)
int n,A,B,C;
{
if (n==1)
printf("Move from %d to %d.\n",A,C);
else {
move(n-1,A,B,C);
move(1,A,C,B);
move(n-1,B,C,A);
}
}

int main(void) {
move(4,1,3,2);

return 0;
}

I understand the solution, what I don't understand is the function declaration!  Why are n, A, B, and C declared just outside of the function prototype, and where is the function prototype?

Raydot.
0
Question by:Raydot

LVL 22

Expert Comment

This is an old-style function declaration.  It took the C Wizards about a decade to figure out it made more sense to declare the types alongsides the parameters.

0

LVL 3

Author Comment

"declare the types alongsides the parameters" -- huh?

0

LVL 22

Accepted Solution

The original C syntax was:

<function type> <function name> ( <param name1>, <param name2>, .... )   <param 1 type >  name1,  <param 2 type>  name2, ...

in other words:   void move(n, A, C, B)    int n,A,B,C;

----------------------------------------
this was mighty silly and repetetive syntax, just like the old FORTRAN way of declaring parameters.

Somewhere along the line the parameter syntax was loosened up so you
could use the newer syntax:   void move( int n, int a, int c, int b );
This also made it possible to pre-declare the function and parameter types.
------------------------------------------------------

I would change the functions to use the new-style headers.  The semantics should be just the same.

0

LVL 3

Author Comment

What the problem was is that the program didn't work when I converted it to the "new" function declaration, but that turned out to be because I re-wrote the prototype as

void move(int n, int A, int B, int C)

and not

void move(int n, int A, int, C, int B)

...and hence my confusion.  Thanks for your help.
0

## Write Comment

Please enter a first name

Please enter a last name

## Featured Post

### Suggested Solutions

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
The goal of this video is to provide viewers with basic examples to understand how to use strings and some functions related to them in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.

#### 875 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

#### Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!