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

时间:2010-05-22 10:28:08

标签: c recursion

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

3 个答案:

答案 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)

是的,为什么不呢?!