Страница 1 из 1

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

Добавлено: 18 фев 2010, 17:22
Dragon
Пытаюсь понять рекурсию. Вроде бы ничего в ней сложного нету, но задачка чуть сложнее сразу загоняет в ступор.

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

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

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.

Но на этих мыслях все и заканчивается (уже литературы перечитал массу, но пока прозрения не наступает) :(

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

Добавлено: 18 фев 2010, 18:31
rrrFer

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

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" производить поиск.

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

Добавлено: 19 фев 2010, 11:17
Dragon
Да, все куда проще, чем я думал... Буду пытаться понять алгоритм, видно я что-то не понимаю в создании алгоритма рекурсии...