0 / 0 / 1
Регистрация: 15.12.2015
Сообщений: 31
|
|
1 | |
Однократный вызов рекурсивной функции11.01.2021, 23:26. Показов 1284. Ответов 10
Метки нет (Все метки)
Всем наилучшего из времен суток. Собственно, в карьер. Мне нужно написать функцию, которая будет единожды вызывать сама себя. Как это можно сделать? ( Очевидный вариант - передавать в нее маркер вызова как параметр, но очень уж на костыль похоже такое решение( Очень обидно при оригинальном вызове передавать в функцию константу))
Отдельно прошу отметить, что пишу на чистом Си, а не на пллюсах. Не знаю, повлияет-ли, но вдруг? Если в ответе будет пример - вдвойне спасибо!
0
|
11.01.2021, 23:26 | |
Ответы с готовыми решениями:
10
Бесконечный цикл в рекурсивной функции Как прописать указатель в рекурсивной функции? С помощью рекурсивной функции вычислить сумму Подсчитать количество вызовов рекурсивной функции |
Заблокирован
|
||||||
12.01.2021, 01:49 | 2 | |||||
Сообщение было отмечено TiARETiK как решение
Решение
TiARETiK, в чём проблема я так и не понял?
Добавлено через 8 минут
2
|
0 / 0 / 1
Регистрация: 15.12.2015
Сообщений: 31
|
|
15.01.2021, 01:53 [ТС] | 3 |
Вот ей богу, ни разу в жизни не использовал статические переменные. Как-то не доводилось. И забыл совсем про них. Спасибо!)
P.S. Благополучно разбил все что нужно на четыре метающихся в друг-друга указателями функции, и забыл, что задал вопрос)
0
|
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
|
|||||||||||
15.01.2021, 14:35 | 5 | ||||||||||
RatPoison, ваше решение ошибочно. Вызовите
fun несолько раз и увидите в чем дело.TiARETiK, Решением проблемы является обычный триггер в виде все той же статической переменной:
2
|
Заблокирован
|
||||||
15.01.2021, 14:57 | 6 | |||||
zeroalef, я просто показал автору инструмент. Да, статическая переменная накопить нужный счётчик и при втором вызове функция стразу завершится. Но автор спросил, как один раз вызывать рекурсивную функцию.
Добавлено через 9 минут можно обойтись и без статической переменной.
0
|
200 / 236 / 33
Регистрация: 29.03.2019
Сообщений: 667
|
|
15.01.2021, 15:05 | 7 |
static тут как раз то что нужно. Главное -- правильно составить логику триггера. Тогда можно добиться, например, вызова рекурсии при каждом третьем вызове, или при каждом втором и т.д. У человека наипростейший случай примитивного триггера.
0
|
0 / 0 / 1
Регистрация: 15.12.2015
Сообщений: 31
|
|
15.01.2021, 23:57 [ТС] | 9 |
До такого варианта и сам дошел, но, повторюсь, выглядит как костыль. Какой-то внутренний жадина говорит, что постоянная передача в функцию лишнего параметра( а она должна вызываться много-много раз за секунду) - это плохо.
0
|
612 / 373 / 69
Регистрация: 21.09.2008
Сообщений: 1,277
|
|
17.01.2021, 17:53 | 11 |
Компилятор какой используете? В gcc возможно использование передачи до двух параметров через регистры ecx, edx на архитектуре x86_32 при указании атрибута у функции fastcall. Соответственно, стек не расходуется, адресация и производительность без накладных расходов.
0
|
17.01.2021, 17:53 | |
17.01.2021, 17:53 | |
Помогаю со студенческими работами здесь
11
Вычислить значение выражения с помощью рекурсивной функции Перемножить два числа с помощью рекурсивной функции Вычислить значение выражения с помощью рекурсивной функции Вызов рекурсивной функции Вызов рекурсивной функции в отдельном потоке Однократный вызов скрипта с помощью ExternalInterface.call Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |