2015-08-10 2 views
0

Я пишу код для решения проблемы с разрезом Rod Cut, но во время выполнения я получал подсказки о сбоях сегментации. Я попытался отладить это с помощью gdb, и это показало проблему с функцией recRodCut. Может ли кто-нибудь помочь мне найти проблему?Как удалить сбой сегментации в этом коде

#include <stdio.h> 

int recRodCut(int* arr, int n) 
{ 
    int res; 
    int i; 
    if(n==0) 
    { 
     return 0; 
    } 

    for(i = 0; i< n ; i++) 
    { 
     res = max(recRodCut(arr,n) , arr[i]+recRodCut(arr,n-i)); 
    } 

    return res; 
} 

int max(int a, int b) 
{ 
    return (a<b)?a:b; 
} 

int main() 
{ 
    int value[] = {0,1,5,8,9,10,17,17,20,24,30}; 
    int result = recRodCut(value, 4); 

    printf("The value is %d \n", result); 
} 
+0

Проголосовал закрыть как опечатку. См. Наблюдение @ mtijanic о бесконечной рекурсии. – mah

ответ

6

Я не видя Segfault здесь, но я вижу незакрытую рекурсию, который заканчивается в переполнению стека.

Подумайте, как вы вызываете ваш recRodCut():

recRodCut(value, 4); 

// i = 0, first iteration: 
    res = max(recRodCut(value, 4), value[0]+recRodCut(value, 4-0)); 

Как вы можете видеть, вы всегда вызывая recRodCut с теми же аргументами. Это означает, что он никогда не ударит if(n==0) и залог рано.


Кстати, ваша max() функции является фактически min() функцией :)

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