程序崩溃并返回代码255

时间:2014-11-18 12:20:32

标签: c runtime-error

#include <stdio.h>
int findnumb(int max)
{
    static int total=2;
    static int desk=1;
    if(total>max)   
    {
    return 0;
    }
    else
    {   
        if(desk>=total)
        {
        total++;
        desk=1;
        return findnumb(max);
        }
        else
        {
        desk++;
        int left=desk*(desk-1)/2;
        int right=(total*(total+1)/2)-(desk*(desk+1)/2);
            if(left==right) 
            {
            printf("Desk number %d, number of participants %d\n", desk, total);
            return findnumb(max);
            }
        return findnumb(max);
        }
    }
}



main()
{
    int max;
    printf("Enter the upper bound:\n");
    scanf(" %d", &max);
    printf("------------------------\n");
    findnumb(max);
    printf("Search is complete");

}

这是一个像这样的谜语:

假设存在会议,我们不知道有多少人参加会议。但是,我们看到一个人退出会议。如果我们问这个人在会议上有多少人,他只回答“我不知道”。尽管如此,他还是说“我正坐在一张编号为x的椅子上,而且我和我之上的数字总和相等。换句话说,如果椅子的数量是x,那么1,2,3 ...... .x-1 = x + 1 x + 2 ...... t-1,t(总参与者数)。此外,我们不知道t的值和主席号码x。参与者总数8和主席号码6是示例配置。因为1 + 2 + 3 + 4 + 5 = 7 + 8 = 15.您的任务是通过逐个试用找到类似的配置。

它希望解决方案实现递归函数。

因此,当我运行此代码时,它无法管理大于360的scanf'ed值,同时崩溃并以返回码255终止,那么我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分:5)

您对您的平台一无所知,退出代码通常依赖于平台。

然而,可能的原因(具有讽刺意味的是)堆栈溢出! 这不仅是这个网站的名称,而且是真实的。

所有系统都对递归有实际限制,说实话360是一个递归负载。

您可以在编译器指令或选项中修改堆栈的大小。 如果不是,你可能不得不解开&#39;将递归代码转换为顺序程序。

通常情况下,您可以在堆上分配比系统在递归调用中接受的更多空间。