I am learning c language and i am confused about the code below. its a recursion but how come when i run this code, it won't run until i provided 2 different inputs but system only execute the first?
Thanks in advance.
#include <stdio.h>
long factor (float user_input)
{
if(user_input <=1)
return 1;
else
return (user_input * factor (user_input - 1));
}
int main ()
{
int user_input;
long factorial_calculation;
printf("what factorial number would you like to calculate?\n");
scanf("%d\n", &user_calculation);
factorial_calculation = factor (user_input);
printf("ld\n", factorial_calculation);
return 0;
}
Your user_input
is int
but you are passing variable as a float
and running your factorial function on it. Factorials are undefined for non-integer nos, so you are better off using int
.
In:
printf("ld\n", factorial_calculation);
ld
is an invalid format specifer.
In
scanf("%d\n", &user_calculation);
I think you meant
scanf("%d", &user_input);
The following code works:
#include <stdio.h>
int factor (int user_input)
{
if(user_input <=1)
return 1;
else
return (user_input * factor (user_input - 1));
}
int main ()
{
int user_input;
long factorial_calculation;
printf("what factorial number would you like to calculate?\n");
scanf("%d", &user_input);
printf("%d\n",user_input);
factorial_calculation = factor (user_input);
printf("%d\n", factorial_calculation);
return 0;
}