{2,4,3,6}
所以对于数组
{2,8,24,144}
输出应为
Segmentation fault : CORE DUMP
我的迭代版本没问题
我尝试进行反复修改并尝试打印它们但却无法得到它所说的答案
SelectMany
有人可以指出我做错了什么以及我应该修改什么。在再次调用该函数的地方我觉得它在哪里继续前进。我确实指定了所有约束,但仍然存在一些问题仍然存在,我无法确定位置。
答案 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)它将是最后一次迭代。