Celia_D 2019-03-26 14:40 采纳率: 50%
浏览 501
已采纳

用递归关系求1!+2!+……+n! 从4开始,运行时就停止工作,为什么啊?

实现 输入n,求1!+2!+……+n!=?

小白一只,请教各位,下面这个程序,输入1,2,3都没问题,输入>4的数运行后就停止工作,这是为什么啊?代码有什么问题吗?

#include "stdafx.h"
#include <stdio.h>

int _tmain(int argc, _TCHAR* argv[])
{
    int add(int x);
    int f(int m);
    int a,b;
    printf("input an integer:");
    scanf("%d",&a);
    b=add(a);
    printf("output:%d",b);
    return 0;
}
int add(int x)
{
    int f(int m);
    int y;
    if(x==1)
        y=1;
    else y=f(x)+add(f(x-1));
    return(y);
}
int f(int m)
{
    int n;
    if(m==1)
        n=1;
    else n=f(m-1)*m;
    return(n);
}



  • 写回答

2条回答 默认 最新

  • cykac1998 2019-03-26 14:46
    关注

    提问者是按递归的思路来实现阶乘的,所以每有一次阶乘,都需要调用很多次f,随着你输入的n越来越大,极大量的函数调用入栈会占用特别多的资源,导致最终一直在入栈没有出栈,因为只有最底层的f运行完,才会一个接着一个出栈,所有最终内存提供资源崩溃时就无法执行了,由保集成环境的护机制强制退出

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器