题目来源:
https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1113
Description
如下程序的功能是计算 Fibonacci数列的第n项。函数fib()是一个递归函数。请你改写该程序,计算第n项的同时,统计调用了多少次函数fib(包括main()对fib()的调用)。
#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);
}
Input
输入一个正整数n。
Output
输入包含两行,第一行是一个整数,表示第n项的值;第二行输入递归调用了多少次,具体格式见输出样例。
Sample Input
20
Sample Output
6765
递归调用了13529次
题意描述:
输入要求fib数列第n项
计算并输出该项的值,并指出调用了几次递归函数
解题思路:
加一个全局变量num,初始化,放在递归函数递归出口的前面计数,最后在主函数中输出即可
程序代码:
1 #include<stdio.h> 2 int num; 3 int fib(int n); 4 int main() 5 { 6 int n; 7 while(scanf("%d",&n) != EOF) 8 { 9 num=0; 10 printf("%d\n",fib(n)); 11 printf("递归调用了%d次\n",num); 12 } 13 return 0; 14 } 15 int fib(int n) 16 { 17 num++; 18 if(n==1||n==2) 19 return 1; 20 else 21 return fib(n-1)+fib(n-2); 22 }
易错分析:
注意计数变量在主函数和递归函数中的位置