是否可以在C中编写递归静态函数?
答案 0 :(得分:14)
是。将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);
}
不,因为静态变量将被破坏。
答案 1 :(得分:3)
#include <stdio.h>
static void count_to_five(void)
{
static int i = 0;
while (i < 5) {
i++;
printf("%d\n", i);
count_to_five();
}
puts("You are seeing this because I counted to five! (did not enter loop)\n");
return;
}
int main(void)
{
count_to_five();
return 0;
}
所以,是的。请注意,i
的静态存储意味着每次调用count_to_five()
时它都会保留其值。但是,count_to_five()
无需定义为static
。
很难说出你在问什么。
答案 2 :(得分:2)
是的,为什么不呢?!