递归算法求解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!就已经发生的数字溢出现象,计算结果为负。)

posted @ 2022-04-22 21:58  20212423李思源  阅读(497)  评论(0)    收藏  举报