在静态函数中是否可以递归?

yoa*_*str 4 c recursion

是否可以在C中编写递归静态函数?

pax*_*blo 14

是.当您应用于static函数时,它与递归函数中的静态变量不同(这一个问题).

前者只是控制函数是否在编译单元外可见(例如,对于链接器).

后者意味着所有递归级别的变量只有一个副本,而不是每个递归级别一个副本,这通常是需要的.

所以:

static unsigned int fact (unsigned int n) {
    if (n == 1U) return 1;
    return n * fact (n-1);
}
Run Code Online (Sandbox Code Playgroud)

没关系,但是:

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);
}
Run Code Online (Sandbox Code Playgroud)

不是,因为静态变量将被破坏.