如何删除此代码中的分段错误

Int*_*lue 0 c segmentation-fault

我正在编写代码来解决Rod Cut问题,但我在运行时遇到了Segmentation Fault提示.我尝试使用gdb调试它,它显示了recRodCut函数的问题.有人可以帮我找到问题吗?

#include <stdio.h>

int recRodCut(int* arr, int n)
{
    int res;
    int i;
    if(n==0)
    {
        return 0;
    }

    for( i = 0; i< n ; i++)
    {
        res = max(recRodCut(arr,n) , arr[i]+recRodCut(arr,n-i));
    }

    return res;
}

int max(int a, int b)
{
    return (a<b)?a:b;
}

int main()
{
    int value[] = {0,1,5,8,9,10,17,17,20,24,30};
    int result = recRodCut(value, 4);

    printf("The value is %d \n", result);
}
Run Code Online (Sandbox Code Playgroud)

mti*_*nic 6

我没有看到这里的段错误,但我看到一个未终止的递归,最终导致堆栈溢出.

考虑一下如何打电话给你recRodCut():

recRodCut(value, 4);

// i = 0, first iteration:
    res = max(recRodCut(value, 4), value[0]+recRodCut(value, 4-0));
Run Code Online (Sandbox Code Playgroud)

如您所见,您始终使用相同的参数调用recRodCut.这意味着它永远不会if(n==0)提前打保.


顺便说一句,你的max()功能实际上是一个min()函数:)