user2019594
user2019594

Reputation: 353

Segmentation Fault 11 with recursive function in C

I keep receiving a Segmentation Fault 11 for the following code. I believe it has something to do with recursion but I'm not entirely sure how. The method should take in an array, skip the odd values, and keep repeating until it has an array with only value left and returns that value.

Thanks!

#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);
}

Upvotes: 0

Views: 195

Answers (1)

memo1288
memo1288

Reputation: 738

Do you want to skip the odd values or the odd indexes? You are currently skipping the odd values, so after you call callTable once, there are only even values left. Then, on the second call, you try to use an array of half the size to store the even values (which are all of them), so you try to store the entire array on another with half the size.

If you intended to skip the odd indexes, then change this line:

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

for this one:

if (i%2==0)

That runs fine and returns 1 (which is the number with index 0).

Upvotes: 2

Related Questions