1.递归题目
下列程序执行后,输出的结果为()
#include <stdio.h>
int cnt=0;
int fib(int n){
cnt++;
if(n==0)
return 1;
else if(n==1)
return 2;
else
return fib(n-1)+fib(n-2);
}
void main()
{
fib(8);
printf("%d",cnt);
}
结果为:67
2.解析
- 编程中的cnt代表了调用次数
- 首先进入fib()函数中时,n=8,cnt++==1,返回值仍为调用fib()函数,进行两次调用,将n=8分为n=7和n=6分别进行递归,n=7和n=6接着向下分解,直到n=1和n=0,所以:
n=8 -->n=7和n=6
n=7 -->n=6和n=5
…
n=3 -->n=2和n=1
n=2 -->n=1和n=0 - 用cnt计算递归了多少次
- cnt为全局变量,故在整个函数中都可应用