gpt4 book ai didi

c - 全局变量未正确递增

转载 作者:太空宇宙 更新时间:2023-11-04 05:10:01 24 4
gpt4 key购买 nike

int count;
int main(){
count=0;

printf("%6d\t %6d\t %6d\t ",i+1,multiFib(i),count);
}

int multiFib(int x){

if (x<2){
return 1;
count++;
}}

在这段代码中,count 总是给出 0 个结果。我把它做成一个全局变量,而不是在函数中再次定义它。我怎样才能增加这个变量?

按顺序输出;那不是问题。它给出了结果:

1    1 0
-

2 1 0
-

3 2 0

所以,count 没有增加——但为什么呢?

最佳答案

虽然无法保证评估顺序(请参阅其他多个答案),但还有另一个更基本的问题(实际上是其中两个):

int multiFib(int x)
{
if (x<2){
return 1;
count++;
}
}
  1. 您尝试递增 count从函数返回后。您的编译器应该警告无法访问的代码。
  2. 您没有从 multiFib() 返回值当输入大于 2 时。

main()的片段你显示的引用了一个 undefined variable i .我假设那是因为你删除了 for (i = 0; i < 40; i++)printf() 之前开始循环陈述。要解决“评估顺序”问题,您可能需要使用:

int count;
int main(void)
{
for (int i = 0; i < 40; i++)
{
count = 0;
int fib = multiFib(i);
printf("%3d %10d %10d\n", i+1, fib, count);
}
return(0);
}

这会评估对 multiFib() 的调用次数对于函数的每个顶级调用。

对于 multiFib()函数本身,你可能需要:

int multiFib(int x)
{
count++;
if (x < 2)
return x;
else
return multiFib(x-1) + multiFib(x-2);
}

虽然这是斐波那契数列的一个非常慢的实现,所以你不应该用它作为你的家庭作业的答案(但它确实有一个“工作”功能)。

示例输出:

  1             0             1
2 1 1
3 1 3
4 2 5
5 3 9
6 5 15
7 8 25
8 13 41
9 21 67
10 34 109
11 55 177
12 89 287
13 144 465
14 233 753
15 377 1219
16 610 1973
17 987 3193
18 1597 5167
19 2584 8361
20 4181 13529
21 6765 21891
22 10946 35421
23 17711 57313
24 28657 92735
25 46368 150049
26 75025 242785
27 121393 392835
28 196418 635621
29 317811 1028457
30 514229 1664079
31 832040 2692537
32 1346269 4356617
33 2178309 7049155
34 3524578 11405773
35 5702887 18454929
36 9227465 29860703
37 14930352 48315633
38 24157817 78176337
39 39088169 126491971
40 63245986 204668309

请注意,如果超过 40,就会开始出现算术溢出。它还变得非常(非常、非常)慢。

关于c - 全局变量未正确递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20021612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com