Я работаю программистом, но не имею никакого образования в области компьютерных наук, поэтому недавно я следил за превосходным введением MIT OpenCourseWare в компьютерные науки и программирование. В ходе которого задается вопрос: "будет ли любая программа, написанная с использованием только определений и вызовов функций, основных арифметических операций, присваивания и условных выражений, выполняться за константное время?"
Я думал, что да, поскольку все эти операции кажутся довольно простыми. Но, как вы, умные люди, вероятно, уже знаете, правильный ответ был отрицательным, по-видимому, из-за возможности неопределенной рекурсии.
Кажется, я просто не понимаю значения «в постоянное время». То, как я представил это значение, звучало так, как будто это просто означает, что простая операция займет известное количество времени для завершения. Я согласен с тем, что рекурсия может привести к тому, что ваша программа будет работать вечно, но разве отдельные операции по-прежнему не занимают конечное и измеримое количество времени каждая... даже если их теперь бесконечное количество? Или ответ просто означает, что нельзя с уверенностью сказать, что две бесконечно рекурсивные программы требуют одинакового времени для выполнения?
Если кто-нибудь может дать мне авторитетное определение «за постоянное время» и его значение, я был бы очень признателен!
O(1)
в нотации Big-O. Вы также можете обнаружить, что чтение этого вопроса помогает - Простое английское объяснение Big O< /а>. - person Justin   schedule 02.12.2010