Да.Когда вы применяете static
к функции, это не то же самое, что статическая переменная в рекурсивной функции (что является проблемой).
Первый просто контролирует, видна ли функциявне модуля компиляции (например, для компоновщика).
Последнее означает, что существует только одна копия переменной для всех уровней рекурсии, а не одна на уровень рекурсии, что обычно и требуется.
Итак:
static unsigned int fact (unsigned int n) {
if (n == 1U) return 1;
return n * fact (n-1);
}
в порядке, но:
static unsigned int fact (unsigned int n) {
static unsigned int local_n; // would be fine if not static!
local_n = n;
if (local_n == 1U) return 1;
return local_n * fact (local_n-1);
}
равно , а не , поскольку статическая переменная будет повреждена.