C语言求指导。怎么改写这个程序

#include<stdio.h>int fib(int k);int main(void ){ int n; scanf("%d", &n); printf("%d\n", fib(n)); return 0;}int fib(int k){ if(k == 1 || k == 2) return 1; else return fib(k-1) + fib(k-2);}

#include<stdio.h>
int fib(int k);
int cnt = 0;//全局变量 
int main(void )
{
   
   int n;
   scanf("%d", &n);
   printf("%d\n", fib(n));
   printf("递归调用了%d次",cnt);   
   return 0;
}

int fib(int k,int *a)
{
   cnt++;
   if(k == 1 || k == 2)
       return 1;
   else
       return fib(k-1) + fib(k-2);
}

//不用全局变量
#include<stdio.h>
int fib(int k,int *);
//int cnt = 0;
int main(void )
{
   int n,cnt=0;
   scanf("%d", &n);
   printf("%d\n", fib(n,&cnt));//这里改一下
   printf("递归调用了%d次",cnt);
   return 0;
}
int fib(int k,int *a)
{
  // cnt++;
   (*a)++;
   if(k == 1 || k == 2)
       return 1;
   else
       return fib(k-1,a) + fib(k-2,a);
}

用一个全局变量就可以了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-12-07