@Lynn подскажите в чем заключается неправильность функции?
Мне нужно вычислить в миллисекундах, секундах и т.д. именно на определенной машине и не важно калькулятор это или 64-ядерный серверный процессор.
У вас fib(2)=1, а должно быть 2.
Для конкретной машины нужно смотреть в какие процессорые инструкции превратится этот код. В общем вопрос какой-то бессмысленный.
Ну вы тогда определитесь, сейчас у вас fib(0) = 1, а не ноль.
Хорошо, задача не бессмысленна. Она просто некорректна.
Если очень хочется, то нужно сначала скомпилировать этот алгоритм, посмотреть что там получится в ассемблере, и посчитать количество тактов выполнения на каждую инструкцию…
Время без прямого исполнения - по сути никак. Только сложность. Можете конечно перевести ее в ассемблер, посчитать количество операций, принять что за 1 такт выполняется 1 операция (что тоже является очень грубым допущением) и дальше зная частоту процессора получить время. Но это все будет очень приблизительно. И на практике время выполнения функции будет всегда больше, причем насколько - зависит от множества параметров. Не забудьте еще разные оптимизации, другие более приоритетные вещи в ОС и процессах и т.д.
Без тактов - нет. При фиксированной частоте процессора такт выполняется за постоянное время. И в то же время за такт условно выполняется одна процессорная операция. Другого мерила нет.