我能想到几个原因:
调试/测试目的(警告-尚未测试此代码):
#include <stdio.h>
#define MAX_INPUT 46
int runs=0;
int fib1(int n){
++runs;
return n>2?fib1(n-1)+fib1(n-2):1;
};
int fib2(int n,int *cache,int *len){
++runs;
if(n<=2){
if(*len==2)
return 1;
*len=2;
return cache[0]=cache[1]=1;
}else if(*len>=n)
return cache[n-1];
else{
if(*len!=n-1)
fib2(n-1,cache,len);
*len=n;
return cache[n-1]=cache[n-2]+cache[n-3];
};
};
int main(){
int n;
int cache[MAX_INPUT];
int len=0;
scanf("%i",&n);
if(!n||n>MAX_INPUT)
return 0;
printf("fib1(%i)==%i",n,fib1(n));
printf(", %i run(s)\n",runs);
runs=0;
printf("fib2(%i)==%i",n,fib2(n,&cache,&len));
printf(", %i run(s)\n",runs);
main();
};
我为 fib2 使用了作用域变量,但这是全局变量可能有用的另一种情况(需要存储数据以避免永远占用的纯数学函数)。
只使用一次的程序(例如用于比赛),或者需要缩短开发时间时
全局变量可用作类型化常量,其中某处的函数需要 *int 而不是 int。
如果我打算使用该程序超过一天,我通常会避免使用全局变量。