Как бы вы определили цикл, это бесконечный цикл и выйдет из него.Бесконечная петля: определение и выключение бесконечной петли
Кто-нибудь имеет алгоритм или может помочь мне в этом.
Благодаря
Как бы вы определили цикл, это бесконечный цикл и выйдет из него.Бесконечная петля: определение и выключение бесконечной петли
Кто-нибудь имеет алгоритм или может помочь мне в этом.
Благодаря
Там нет общего алгоритма случая, который может определить, является ли программа в бесконечном цикле или нет для каждого turing complete языка, это в основном Halting Problem.
Идея доказательства его проста:
A
.B
, которая вызывает A
на себе [по B
].A
ответы «программа остановится» - сделать бесконечный циклA
ответы B
не остановить] - остановить immidiatelyТеперь предположим, вы вызываете A
на B
- ответ будет определенно неверным, поэтому A
не существует.
Примечание: выше не является официальным доказательством, а всего лишь наброском его.
ОК .. что, если вы сказали, чтобы пройти длинный ряд данных, который связан с некоторой точкой той же строки. Является ли это частным случаем проблемы с остановкой или у вас есть какие-либо алгоритмы, связанные с ее решением? –
@PankajGupta: Если я не ошибаюсь - для каждой программы 'A' существует программа' B', которая может определить, остановится ли 'A'. Алгоритма ** общего случая ** нет, который может определить, остановлена ли программа или нет - для ** всех программ **. – amit
Как написано другими, оно не может быть определено.
Однако, если вы хотите провести некоторую проверку, вы можете использовать шаблон дизайна WatchDog. Это отдельный поток, который проверяет, активна ли задача. Ваш собственный поток должен регулярно давать сигнал, чтобы сказать, что он жив. Убедитесь, что этот сигнал не установлен внутри вашего (бесконечного) цикла.
Если сигнала не было, программа находится в бесконечном цикле или остановлена, и сторожевой таймер может действовать на нее.
Мое предположение заключается в том, что нет уверенного способа распознать компьютер как бесконечный цикл. Вы должны знать об этом как кодовый инженер. – darijan
Но какой-то интеллектуальный компилятор языка понимает и вытаскивает вас из цикла, если такое происходит. –
Это легко, просто подождите бесконечность и посмотрите, завершена ли программа. – aioobe