Кажется, проблема в том, что вам нужно реализовать два "цикла" через рекурсию; один - это цикл, начинающийся с заданного индекса и суммирующий значения по ходу, отслеживая максимально хорошо размещенную длину для этого начального индекса. Другой - цикл, пробующий каждый возможный начальный индекс. Я вижу, что ваша вспомогательная функция делает первое. Кажется, что вы хотите, чтобы вызываемая функция выполняла последнее, но у нее нет механизма для отслеживания найденного максимума или индекса для проверки, отдельно от длины входного массива. Для этого вам может потребоваться создать еще одну вспомогательную функцию, которая обрабатывает все возможные начальные индексы. Хотя я бы подошел к этому, расширив существующую вспомогательную функцию, чтобы сделать это также, что-то вроде:
int _helper( int arr[], int len, int start, int cur, int sum, int max )
{
if (start >= len) {
/* game over, thanks for playing */
return max;
} else if (cur >= len) {
/* try another starting index */
return _helper( arr, len, start + 1, start + 1, 0, max );
} else if ( sum + arr[cur] == start && max < cur - start + 1 ) {
/* found a longer well placed length */
return _helper( arr, len, start, cur + 1, sum + arr[cur], cur - start + 1 );
} else {
/* bzzzt. try a longer length at this starting index */
return _helper( arr, len, start, cur + 1, sum + arr[cur], max );
}
}
int max_well_placed_length( int arr[], int len )
{
return _helper( arr, len, 0, 0, 0, 0 );
}
#include <stdio.h>
int main(int argc, char **argv) {
int arr[100];
int len = 0;
if (argc > 100) return 1;
while (--argc) sscanf(*++argv, "%d", &arr[len++]);
printf("max well placed length: %d\n", max_well_placed_length(arr, len));
return 0;
}