#c #sorting #array-algorithms
#c #сортировка #массив-алгоритмы
Вопрос:
я искал некоторые алгоритмы D amp; C и основал этот
int sumArray(int anArray[], int size)
{
//base case
if (size == 0)
{
return 0;
}
else if (size == 1)
{
return anArray[0];
}
//divide and conquer
int mid = size / 2;
int rsize = size - mid;
int lsum = sumArray(anArray, mid);
int rsum = sumArray(anArray mid, rsize);
return lsum rsum;
}
но каждый раз, когда я запускаю код без базового варианта, он возвращает ошибку ошибки сегмента.
я пытаюсь понять, почему этот базовый вариант настолько важен, что даже при запуске с n> 1 он по-прежнему возвращает эту ошибку, кто-нибудь протянет руку помощи здесь?
Комментарии:
1. Если вы никогда не вернетесь в качестве базового варианта, вы, очевидно, будете повторяться вечно… который заполнит стек фреймами стека и, следовательно, segfault.
Ответ №1:
Поскольку функция sumArray
вызывает себя рекурсивно,
int lsum = sumArray(anArray, mid);
int rsum = sumArray(anArray mid, rsize);
базовый вариант необходим независимо от размера массива. В противном случае Fnction никогда не сможет выйти из цикла вызова самого себя!
И помните, что это основано на том факте, что один из mid
и rsize
может быть нечетным или четным в обоих базовых случаях для size == 0
и size == 1
:
if (size == 0)
{
return 0;
}
else if (size == 1)
{
return anArray[0];
}
необходимы
Комментарии:
1. о, да, конечно, я забыл о части рекурсии, спасибо.
2. @theguissan добро пожаловать. и спасибо, что задали вопрос. Также не обращайте слишком много внимания на голоса «нет»