0

我不断收到以下代码的分段错误 11。我相信它与递归有关,但我不完全确定如何。该方法应该接受一个数组,跳过奇数值,并不断重复,直到它有一个只剩下值的数组并返回该值。

谢谢!

#include <stdio.h>

int callTable(int table[], int size)
{

  int i = 0;
  int j = 0;
  int cHeight = size / 2;

  int cTable[cHeight];

  while (i < size)
  {
    if (table[i] % 2 == 0)
    {
      cTable[j] = table[i];
      j++;
    }

    i++;
  }

  if (size > 1)
    return callTable(cTable, cHeight);

  else
    return cTable[0];

}

int main()
{

  int tPass[100];

  int i, answer;

  for (i = 0; i < 100; i++)
    tPass[i] = i + 1;

  answer = callTable(tPass, sizeof(tPass) / sizeof(tPass[0]));

  printf("%d\n", answer);
}
4

1 回答 1

2

你想跳过奇数还是奇数索引?您当前正在跳过奇数值,因此在您调用callTable一次后,只剩下偶数值了。然后,在第二次调用中,您尝试使用大小为一半的数组来存储偶数值(它们都是),因此您尝试将整个数组存储在另一个大小为一半的数组中。

如果您打算跳过奇数索引,请更改此行:

if (table[i]%2==0)

对于这个:

if (i%2==0)

运行良好并返回 1(即索引为 0 的数字)。

于 2013-10-01T04:25:35.077 回答