Некоторые встроенные компиляторы C поддерживают static
в качестве спецификатора параметров в качестве нестандартного расширения. Для этих компиляторов static
означает параметр, который глобально распределен (как правило, это делается для сохранения пространства стека, которое может быть очень ограниченным на встроенной платформе).
В этом случае наличие параметра static
означает, что функция не является повторной (не может безопасно возвращаться). Глобально выделенный n
будет просто изменяться при каждом вызове до окончательного вызова fact(1)
; по мере того как рекурсия раскручивается, каждый возвращаемый вызов будет умножать n
(теперь равный 1) на результат, поэтому чистый эффект заключается в том, что группа из 1s умножается вместе для получения конечного результата.
Если, возможно, это внедренный код C, 'static' означает, что параметр распределяется глобально; таким образом, функция не является повторной (она не может безопасно переписываться). – nneonneo
Вы должны вернуть f в обоих условиях, но после рекурсивного вызова этой функции вы, наконец, вернетесь 1, так что конечный результат равен 1. – Nagaraju