重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
用全局变量来计数
公司主营业务:成都网站设计、网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出堆龙德庆免费做网站回馈大家。
int i=0;
void func()
{
.....
i++;
......
}
最后输出i的值就知道func调了多少次了。
其它的暂时没想到。
第7个
你自己再推推,的确是9,你可能是有一次n=1的情况没有count++或第一次调用Fibonacci的时候没有++
15次,这个需要画个图就明白了。函数自己调用了自己,说明是递归函数。递归函数要观察结束条件(n 2则退出),除此之外,每次调用会产生两次新的调用。
每个fun(..)就是一次调用
按照函数的代码来看,当参数小于2时就不再分支。这就是最直接的解法。
如果你想找更通用的解法,可以观察一下,(下面推理逻辑只说数字,写fun太麻烦)
设fun(x)的调用次数为Nx,那N5 = 1 + N4 + N3(1 为本次调用本身的记数)
N4 = 1 + N3 + N2
N3 = 1 + N2 + N1
N2 = 1 + N1 + N0
N1 = 1
N0 = 1
这个是类似斐波那契数列的一种计算方式,得到的数列(从N0开始)是 1, 1, 3, 5, 9, 15 ……从第三个数(N2)开始,每个数等于前两个数的和+1
由此可以推导出,N6 = 25,N7 = 41 …… 可以验证一下
使用函数内部的静态变量就能实现啦。例子如下:
#include
stdio.h
int
foo()
{
static
int
count=0;
//
静态变量count统计调用次数
++count;
//
没调用一次count+1
return
count;
//
返回调用次数
}
int
main()
{
foo();
//
调用一次
foo();
//
调用一次
foo();
//
调用一次
printf("%d\n",foo());
//
输出调用次数为4,因为printf里面还调用了一次。
}
void f(int* k, int n, int* fcnt, int* scnt)
{
void s(int* k, int n, int* fcnt, int* scnt);
++*fcnt;
++* k;
if (*k == n)
return;
s(k, n, fcnt, scnt);
}
void s(int* k, int n, int* fcnt, int* scnt)
{
void f(int* k, int n, int* fcnt, int* scnt);
++*scnt;
++*k;
if (*k == n)
return;
f(k, n, fcnt, scnt);
}
void solve(int n)
{
void f(int* k, int n, int* fcnt, int* scnt);
int k = 0, fcnt = 0, scnt = 0;
f(k, n, fcnt, scnt);
//输出f与s两个函数的调用次数
printf("%d %d", fcnt, scnt);
}
传递一个指针进函数,用指针来记录
如:
#includestdio.h
int
call(int
*p)
{
(*p)++;
return
0;
}
int
main()
{
int
a=0;
int
*p=a;
call(p);
//调用1次
call(p);
//调用2次
printf("call函数调用次数:%d\n",a);
}