递归查找并填充给定数组值与所有先前数组值的乘法

时间:2016-11-14 20:21:13

标签: c++ recursion

{2,4,3,6}

所以对于数组

{2,8,24,144}

输出应为

Segmentation fault : CORE DUMP

我的迭代版本没问题

我尝试进行反复修改并尝试打印它们但却无法得到它所说的答案

SelectMany

有人可以指出我做错了什么以及我应该修改什么。在再次调用该函数的地方我觉得它在哪里继续前进。我确实指定了所有约束,但仍然存在一些问题仍然存在,我无法确定位置。

3 个答案:

答案 0 :(得分:0)

您的代码中存在两个问题。首先,i++在你递归之前没有生效,因此你的递归变得无限(每次调用它i等于0)。这是您的分段错误的原因(您正在吹制堆栈)。请改用++i。第二个问题是A[i] = a[i]+A[i-1];,如果您尝试将数字相乘,则显然应为A[i] = a[i]*A[i-1];

答案 1 :(得分:0)

递归调用

atoA(a,A,i++,size);

不对。由于使用了后增量运算符,它与:

相同
atoA(a,A,i,size);
i = i + 1;

因此,您将获得无限递归和堆栈溢出。将该行更改为:

atoA(a,A,i+1,size);

此外,两个版本的计算之间存在不匹配。

在递归版中,您有:

     A[i] = a[i]+A[i-1];

在迭代版本中,您有:

else A[i] = a[i]*A[i-1];

其中一个需要更改才能看到匹配的结果。

答案 2 :(得分:0)

自从我在大学的第一个学期以来,我一直没有使用过C ++。因此,您需要调整并检查以下代码:

boolean mult (int accValue, int pos, int A[])
{
    int value = accValue*A[pos];
    if(pos == 0)
      printnf("[ ");
    else
      printnf(",");
    printf(" %d ", value)
    if(pos = a.lenght()-1)
    {
        printnf("]");
        return false;
    }
    else
    {
        return mult(value, pos++, A);
    }
}

running code

mult(1, 0, A[]);

这是一个递归函数,它将迭代到平凡的情况,在这种情况下是条件if(pos = a.lenght() - 1)它将是最后一次迭代。