|
|
|
Рекурсия
|
|||
|---|---|---|---|
|
#18+
Пришлось создать тему Эта функция никогда не вернет 13 Как прервать на 4 уровне вложенности функцию и вернуть 13 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2006, 16:24 |
|
||
|
Рекурсия
|
|||
|---|---|---|---|
|
#18+
Конечно. Выполните следующий код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Изучив результат, делайте выводы и думайте как вам быть дальше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2006, 17:08 |
|
||
|
Рекурсия
|
|||
|---|---|---|---|
|
#18+
И что я знаю что происходит с "x" Я дал этот пример не для выяснения значения "x" Я спросил как прервать всю цепочку в стеке и вернуть нужное мне значение почему RETURN не прерывает выполнение всей функции а идет прыгать по ее вызовам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2006, 18:05 |
|
||
|
Рекурсия
|
|||
|---|---|---|---|
|
#18+
Что вам непонятно? Если х сначала увеличивается, а потом уменьшается обратно, значит в условии if x = 5 надо поставить признак достижения этого значения (ll_Return), а вместо RETURN самой функции IF котрый в зависимости от значения ll_Return(true или false), возвращает 13 или 666. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2006, 18:31 |
|
||
|
Рекурсия
|
|||
|---|---|---|---|
|
#18+
Виноват, переменная ll_Return имеет префикс, конечно не ll (local logical), а gl - global logical ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2006, 18:33 |
|
||
|
Рекурсия
|
|||
|---|---|---|---|
|
#18+
ну вот что и требовалось доказать я еще раньше спросил: "что мне вводить глобальную переменную для отслеживания факта достижения условия?" Но волнует попрежнему другой факт какой механизм есть у фокса для прекращения всей цепочки вызовов почему RETURN этого не делает Cancel не предлогать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2006, 18:50 |
|
||
|
Рекурсия
|
|||
|---|---|---|---|
|
#18+
Sea.s2почему RETURN не прерывает выполнение всей функции а идет прыгать по ее вызовам? А почему она должна прервать? Вас ведь не удивляет, что RETURN 666 ничего не прерывает. Почему же команда RETURN данная в другом месте должна что-то там прервать? Все как и положено. Команда RETURN штатно завершает выполнение текущей процедуры или функции и передает управление на уровень выше. Если необходимо "перескочить" через несколько уровней, то у команды RETURN есть дополнительные опции. Куда возвращать результат. В данном случае это выглядит так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Однако, в общем случае, это не годится, поскольку вызвавшая процедура не обязательно главная. Как правило, рекурсия вызывается не сама по себе, а обязательно через дополнительную функцию "вхождения" в рекурсию. Тогда получаем такой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Функция "вхождения" в рекурсию берет на себя функции диспетчера и контроля корректности переданных параметров. А в данном случае, еще и точкой возврата в случае прерывания цепочки рекурсии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2006, 20:41 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33699307&tid=1591799]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
69ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 430ms |

| 0 / 0 |
