2013-10-01 3 views
0

Я продолжаю получать ошибку сегментации 11 для следующего кода. Я считаю, что это имеет какое-то отношение к рекурсии, но я не совсем уверен, как это сделать. Метод должен принимать в массиве, пропускать нечетные значения и продолжать повторяться до тех пор, пока он не получит массив с единственным значением слева и возвращает это значение.Сегментация Fault 11 с рекурсивной функцией в C

Спасибо!

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

Что вы узнали, когда пытались запустить его в отладчике? –

ответ

2

Вы хотите пропустить нечетные значения или нечетные индексы? В настоящее время вы пропускаете нечетные значения, поэтому после того, как вы вызываете callTable один раз, останутся только четные значения. Затем, во втором вызове, вы пытаетесь использовать массив размером половину размера для хранения четных значений (которые все они), поэтому вы пытаетесь сохранить весь массив на другом с половиной размера.

Если вы намеревались пропустить нечетные индексы, а затем изменить эту строку:

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

для этого:

if (i%2==0) 

Это работает отлично и возвращает 1 (это число с индексом 0).

Смежные вопросы