/*淮南师范学院 电子工程学院 夏健钧 2017/3/25*/
/*factor.c -- 使用循环和递归计算阶乘*/
#include<stdio.h>
long fact (int n);
long rfact (int n);
int main(int argc, const char *argv[])
{
int num;
printf("This program calculates factorials.\n");
printf("Enter a value in the rang 0-12 (q to quit):\n");
while (scanf ("%d",&num) == 1)
{
if (num < 0)
printf("No negative number, please.\n");
else if (num > 12)
printf("Keep input under 13. \n");
else
{
printf("loop: %d factorials = %ld\n", num, fact(num));
printf("recursion: %d factorials = %ld\n",num , rfact(num));
}
printf("Enter a value in the rang 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 ;
/*factor.c -- 使用循环和递归计算阶乘*/
#include<stdio.h>
long fact (int n);
long rfact (int n);
int main(int argc, const char *argv[])
{
int num;
printf("This program calculates factorials.\n");
printf("Enter a value in the rang 0-12 (q to quit):\n");
while (scanf ("%d",&num) == 1)
{
if (num < 0)
printf("No negative number, please.\n");
else if (num > 12)
printf("Keep input under 13. \n");
else
{
printf("loop: %d factorials = %ld\n", num, fact(num));
printf("recursion: %d factorials = %ld\n",num , rfact(num));
}
printf("Enter a value in the rang 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 ;
}
/*x小结: 既然用尾递归和循环来计算都没问题,那么应该选择哪一个呢? 一般而言,选择循环*/