|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面代码分别使用了循环和递归计算一个5的阶乘,图片是运行结果。
求解ans = n * rfact(n - 1)是怎么计算5的阶乘 = 120的 , 和我想的不一样。
#include <stdio.h>
long fact(int n);
long rfact(int n);
int main(void)
{
int num;
printf("this program calculates factoriala.\n");//翻译:该程序计算阶乘。
printf("enter a value in the range 0-12 (q to quit): \n");//翻译:输入一个介于0到12之间的值(q退出):
while (scanf("%d" , &num) == 1)
{
if (num < 0)
printf("no negative numbers, please.\n");//翻译:请不要输入负数
else if (num > 12)
printf("keep input under 13.\n");//翻译:输入不要大于12
else
{
printf("loop: %d factorial = %ld\n" , num , fact(num));
printf("recursion: %d factorial = %ld\n" , num , rfact(num));
}
//翻译:输入:一个0到12之间到值(q退出):
printf("enter avalue in the range 0-12 (q to quit): \n");
}
printf("Bye.\n");
return 0;
}
//使用循环的函数
long fact(int n)
{
long ans;
for (ans = 1; n > 1; n--) {
ans *= n;
}
return ans;
}
//使用递归的函数
long rfact(int n)
{
long ans;
if (n > 0) {
ans = n * rfact(n - 1);
}
else
ans = 1;
return ans;
}
|
|