递归算法求解n!计算极限
递归算法求解n!计算极限
一、问题描述
运用递归思想求解n!

二、算法设计
#include <stdlib.h>
unsigned long Fact(unsigned long n);
int main()
{
unsigned long m;
printf("input m:");
scanf ("%d",&m);
printf("%d!=%lu\n",m,Fact(m) );
return 0;
}
unsigned long Fact(unsigned long n)
{
if (n == 0 || n == 1) return 1;
else return n * Fact(n-1);
}
三、递归极限


本机操作系统为win10操作系统,所用编译器为DEVC++
在计算34!时没有结果输出,最大计算值为33!,对于输出结果定义数据类型为unsigned long int
四、对于PPT中算出负数的原因解释

对于有符号数据类型的变量来说,当递归数据超过内存极限时,发生了数据溢出。(在计算机中,当要表示的数据超出计算机所使用的数据的表示范围时,则产生数据的溢出。)
数据溢出常常表现出正数运算结果为负数,或者负数运算出现正数的奇怪现象。代表超出了该类型数值的最大值,进位时超过最大值,符号位就会进为1,32位都是1,由于第一位是符号位,所以是负数。加1就会变成32个0。
ppt中的提示语句process return(进程返回)是递归越界的常用提示。

(以上是变量类型为ling int时,计算33!就已经发生的数字溢出现象,计算结果为负。)

浙公网安备 33010602011771号