One of the recent programs that was used as an example to help explain how a recursive function works used this program:

Code:

#include <stdio.h>
unsigned int f,x=0;
unsigned int factorial(unsigned int a);
int main(void)
{
puts("Please enter an integer value from 1 and 8: ");
scanf("%d", &x);
if(x>8||x<1)
{
puts("Only values from 1 to 8 are acceptable.");
}
else
{
f=factorial(x);
printf("%u factorial equals %u\n\n", x,f);
}
return 0;
}
unsigned int factorial(unsigned int a)
{
if(a==1)
{
return 1;
}
else
{
a *=factorial(a-1);
}
return a;
}

I understand how to get a factorial: 4=1*2*3*4 right but how does: a*=factorial(a-1) do that. As of yet I have figured that you are multiplying a to the function factorial(a-1) and assigning the value to a and returning it. I get lost right there, for one thing how do you use call a function within itself but with different arguments/parameters, and if doing that makes it different then how can you have that without declaring the prototype?

And finally I have not learned about factorials I just looked some stuff up on the net and that is how I found the forumla, could someone explain what the point of factorials are or even the point of a "recursive function".

I know this is a lot to ask so if someone could just answer one or two of them I would be grateful.

P.S. The program works just fine I just don't understand it.

Also if a moderator sees this can you tell me why I can no longer log in, I tried it with my user name: cap and my pass which I tried a few times and I know is correct but it keeps saying that I do not have the correct pass, I already e-mailed for my pass to be sent to me but I also wanted this question answered, thanks.