带递归的分段错误

时间:2016-05-10 12:12:03

标签: c++ recursion segmentation-fault

我试图编写用于解决house-robber problem的C ++代码。

但我的递归不起作用,我收到了分段错误。 无法理解错误。请看看

int award(vector<int>& nums, int n, vector<int>& sum)
{
    if (n == 0) sum[0] = 0;
    if (n == 1) sum[1] = nums[0];
    if (n > 1) 
    {
        if ((sum[n-1]) < 0) sum[n-1] = award(nums,n-1,sum);
        if ((sum[n-2]) < 0) sum[n-2] = award(nums,n-2,sum);
        sum[n] = max(sum[n-2] + nums[n-1], sum[n-1]);
    }
    int ans = sum[n];
    return ans;
}

int main() 
{
    vector<int> nums;
    vector<int> sum (100); 
    int a;
    int i = 0;
    while (cin>>a)
    {
        nums[i] = a;
        i++;
    }
    int n = nums.size();
    for(int i = 0; i <= n; i++)
    {
        sum[i] = -1;
    }
    cout<<award(nums,n, sum);
}

1 个答案:

答案 0 :(得分:3)

设n = nums.size()。一个问题是你的for循环从0运行到n,实际上是大小为n的集合中的n + 1个整数。所以其中一个是超出范围的(它是nums [n])。

一个例子:如果n = 3,那么0,1,2,3是4个整数而不是3个的集合。