【发布时间】:2018-09-01 00:50:54
【问题描述】:
我正在尝试在动态分配的列表中递归地找到完美平方和。 出于某种原因,我的函数一直忽略第一个元素。
*A 是指向数组第一个元素的指针。 n 是元素的数量,表示它们的范围是 0 到 n-1。当 n 小于或等于 0 时,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);
}
【问题讨论】:
-
显示一个调用这个函数的例子,它给出了错误的结果。
标签: c recursion perfect-square