我可以在C中编写fib(我有一个示例),但是是否有更有效的方法,如在Python中,当我尝试时,我会得到错误



这在C语言中给出了斐波那契序列的前15个,但我必须手动编写每个序列,我如何使它增加2个变量而不是无穷无尽的变量?这在c++和Python中要容易得多,不知道为什么我不能在C中弄清楚。

#include <stdio.h>
int i;
int main()
{
int var = 1;
int var1 = 1;
int var2 = var+var1; 
printf("%dn", var2);
int var3 = var2+var1;
printf("%dn", var3);

int var4 = var3+var2; 
printf("%dn", var4);
int var5 = var4+var3; 
printf("%dn", var5);
int var6 = var5+var4; 
printf("%dn", var6);

int var7 = var6+var5; 
printf("%dn", var7);
int var8 = var7+var6; 
printf("%dn", var8);
int var9 = var8+var7; 
printf("%dn", var9);

int var10 = var9+var8; 
printf("%dn", var10);
int var11 = var10+var9;
printf("%dn", var11);
int var12 = var11+var10; 
printf("%dn", var12);

int var13 = var12+var11;
printf("%dn", var13);
int var14 = var13+var12; 
printf("%dn", var14);
int var15 = var14+var13;
printf("%dn", var15);

int var16 = var15+var14; 
printf("%dn", var16);
int var17 = var16+var15;
printf("%dn", var17);
int var18 = var17+var16; 
printf("%dn", var18);

int var19 = var18+var17; 
printf("%dn", var19);

}

输出:23.5813213455891442333776109871597258441816765

你的问题缺少关键细节。我猜你正在寻找类似Python的(x,y)=(y,x+y)的东西。

>>> prev=3
>>> next=8
>>> (prev,next)=(next,prev+next)
>>> prev
8
>>> next
11
>>>

,

(prev,next)=(next,prev+next)

基本上等同于

tmp1 = next
tmp2 = prev+next
prev = tmp1
next = tmp2

我们可以交换最后两个赋值而不破坏任何东西。

tmp1 = next
tmp2 = prev+next
next = tmp2
prev = tmp1

这个可以简化。

this = next
next += prev
prev = this

这正是你在这里需要使用的。

int n = 10;
if ( n > 0 ) {
int prev = 0;
printf( "%dn", prev );
int next = 1;
for ( int i=1; i<n; ++i ) {
int this = next;
printf( "%dn", this );
next += prev;
prev = this;
}
}
0
1
1
2
3
5
8
13
21
34

编译器资源管理器演示

注意,我们可以伪造起始值(1,0而不是0,1)来简化逻辑。

int n = 10;
int prev = 1;
int next = 0;
for ( int i=1; i<n; ++i ) {
int this = next;
printf( "%dn", this );
next += prev;
prev = this;
}

编译器资源管理器演示

没关系,我只是花了一点时间才弄明白,对不起。

# include & lt; stdio.h>

int var = 1;
int var1 = 2;
int main()
{
while (var<100)
{
var+=var1;
var1+= var;
printf("%dn", var);
}
}

相关内容

  • 没有找到相关文章

最新更新