Проблема с рекурсией.

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Dragon
Сообщения: 99
Зарегистрирован: 01 окт 2009, 11:21
Откуда: Odessa
Контактная информация:

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

Есть итеративная функция, ищущая в массиве наименьший элемент:

Код: Выделить всё

int index_of_smallest(const int a[], int start_index, int number_used)
{
    int min = a[start_index], index_of_min = start_index;
    for(int index = start_index+1; index < number_used; index++)
    {
        if(a[index] < min)
        {
            min = a[index];
            index_of_min = index;
            //min - наименьший из элементов
            //от a[start_index] до a[index].
        }
    }
    return index_of_min;
}
Надо эту функцию сделать рекурсивной.
Не знаю с чего начать, к чему подступиться.
- Условие останова - конец массива.
- Дабы рекурсия не было бесконечной, то каждый вызов увеличивает index на 1.

Но на этих мыслях все и заканчивается (уже литературы перечитал массу, но пока прозрения не наступает) :(
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

Код: Выделить всё

int isa(const int a[], int st, int n,int imin){
    if(st==n)
		return imin;
	if(a[st]<a[imin])
		imin=st;
	return isa(a,st+1,n,imin);
}
можно так. Возвращает индекс минимального, при вызове четвертым параметром указывать индекс элемента, начиная с которого в массиве "a" производить поиск.
Dragon
Сообщения: 99
Зарегистрирован: 01 окт 2009, 11:21
Откуда: Odessa
Контактная информация:

Да, все куда проще, чем я думал... Буду пытаться понять алгоритм, видно я что-то не понимаю в создании алгоритма рекурсии...
Ответить