0 / 0 / 1
Регистрация: 19.06.2014
Сообщений: 100

Как работает рекурсия?

18.08.2014, 02:20. Показов 6734. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Темы указателей и рекурсии оказались очень сложными для самостоятельного изучения. Объясните, пожалуйста, с примерами:

1) как работает рекурсия, и почему функция не зацикливается?

2) как правильно работать с указателями, если их передавать в функцию?
я пробовала сделать так:


C
1
2
3
mix(*parray_a, size_a, *parray_b, size_b, *parray_c, g, j, index);
 
//нужно из массивов А[size_a] и Б[size_b] сделать массив С[size_a+size_b]
но так не работает, но не понимаю почему.
но работает это:

C
1
 mix(array_a, size_a, array_b, size_b, array_c, g, j, index);
но тогда получается, что я передаю не указатель, а массив передавать мы не можем, тогда что же я передала?

Буду ОЧЕНЬ БЛАГОДАРНА за помощь!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.08.2014, 02:20
Ответы с готовыми решениями:

Как работает рекурсия
Уважаемые друзья! Есть программа из учебника Стивена Прата "Язык программирования С..." перевод числа из десятичной системы...

Как работает рекурсия?
Написал недавно метод, когда писал всё так было просто и понятно, сейчас просматриваю, и вот хоть убей не пойму как он проверяет условие...

Рекурсия, как работает ?
Помогите пожалуйста, никак не могу понять как работает рекурсия, если не сложно то продемонстрируйте пожалуйста на каком то легком примере...

22
3 / 3 / 0
Регистрация: 19.06.2013
Сообщений: 12
15.09.2014, 16:12
Студворк — интернет-сервис помощи студентам
У меня не совсем так.
У меня примерно так

C++
1
2
3
4
5
6
7
function maxelem()
{
...
if (max > maxelem() ) maxelem()
else { другие действия }
...
}
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
15.09.2014, 20:48
darkjedi, крайне не желательно так делать.

Как вариант можно брать последний элемент массива за минимальный/максимальный и передвигать его в самое начало, сравнивая с остальными, когда мы дойдём до массива размером с 1 элемент, то это и будет самый минимальный/максимальный элемент массива.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
 
int min(int array[], int size) {
    int last = size - 1;
    int prev = last - 1;
 
    if ( size == 1 ) {
        return array[last];
    }
    if ( array[last] < array[prev] ) {
        int temp = array[prev];
 
        array[prev] = array[last];
        array[last] = temp;
    }
    return min(array, size-1);
}
 
int main() {
    int size = 10;
    int array[] = {53, 7, 43, 9, 11, 13, 5, 21, 37, 117};
 
    printf("%d\n", min(array, size));
 
    return 0;
}
Для вывода максимального элемента массива в 10 строке меняем знак на ">".

Добавлено через 2 часа 13 минут
darkjedi, кстати в этом случае, да и вообще вместо подобного:
C
1
2
3
4
5
6
7
function maxelem()
{
...
if (max > maxelem() ) maxelem()
else { другие действия }
...
}
лучше создать переменную, присвоить ей результат рекурсивной функции и продолжать работу с этой переменной, так как каждый раз когда мы будем использовать рекурсию, будет каждый раз по новому выполняться функция, а это ппц как влияет на производительность.
C
1
2
3
4
5
6
7
8
9
function maxelem()
{
int temp;
...
temp = maxelem();
if (max > temp ) temp;
else { другие действия }
...
}
Конечно же все зависит от логики программы, может то, что описал выше не подходит, но сама суть показана.
0
0 / 0 / 0
Регистрация: 23.04.2016
Сообщений: 1
23.04.2016, 22:43
Значение возвращается тому, кто его запросил.
Например, если запросить f.fact(1), то метод Factorial::fact сразу вернет 1.
Для запроса f.fact(2) цепочка вызовов будет такой:
сначала запрос Factorial::fact(2), который вернет Factorial::fact(1) * 2.
В ответе есть снова запрос Factorial::fact(1), который возвращает 1. Таким образом, получаем 2*1, т.е. 2.

По этой же схеме проходят и остальные примеры:
f.fact(10) -> f.fact(9) * 10 -> f.fact(8) * 9 * 10 -> ... -> f.fact(1) * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 = 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.04.2016, 22:43

Как работает рекурсия?
Ребята! Вот дошёл до темы рекурсия, и вроде тему из школы роходили, но смотрю на программу, и что-то не могу понять вот эту строку: ...

Как работает рекурсия?
Доброго времени суток. Никогда не любил рекурсию, просто видимо недопонимая ее, но в лиспе, увы нет операторов цикла и приходится...

Как работает рекурсия?
Я не понял алгоритм работы рекурсии. Объясните пожалуйста, если можно, с примерами

Как работает рекурсия?
Помогите разобраться, не понимаю до конца как работает рекурсия в связке с субстринг... Вопрос: Почему при условии if (str.Length &gt;...

Как работает приведенная рекурсия?
#include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; void someFunction ( int , int, int ); int main () { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Опции темы

Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru