我试图在动态分配的列表中递归地找到完美平方的总和。出于某种原因,我的函数一直忽略第一个元素。
*A 是指向数组第一个元素的指针。n 是元素的数量,表示它们的范围是 0 到 n-1。当 n 小于或等于零时, n-1 不是有效索引,因此我将 0 返回到完美平方和。
int sum(int *A, int n)
{
int i, num = 0;
if (n <= 0)
return num;
for (i = 0; i < A[n - 1]; i++) {
if (i*i == A[n - 1]) {
num = A[n - 1];
}
}
return num + sum(A, n - 1);
}
为什么第一个元素总是被忽略?它适用于列表中的所有其他元素。
编辑:我尝试再次调用该函数,似乎只有数字 1 被忽略了。通过修改 for 循环条件已解决此问题,因此解决方案是:
int sum(int *A, int n)
{
int i, num = 0;
if (n <= 0)
return num;
for (i = 0; i <= A[n - 1]; i++) {
if (i*i == A[n - 1]) {
num = A[n - 1];
}
}
return num + sum(A, n - 1);
}