我有这个代码用于计算fibonacci
数在python
。它有效并给出了预期的结果。但当我把同样的内容翻译成Java
, 它失败。知道这里出了什么问题吗?
In python
:
def fib3(n):
a,b=0,1
while n>0:
a,b=b,a+b
n-=1
return a
fib3(12) --> 144
In Java
:
public static int fib2(int n){
int a = 0;
int b =1;
while(n-- >0){
a=b;
b=a+b;
}
return a;
}
fib2(12) --> 2048
在这个部分:
a=b;
b=a+b;
你正在分配b
to a+b
, but a
已经b
。所以你真的加倍了b
最简单的解决方案是一个临时变量:
public static int fib2(int n){
int a = 0;
int b =1;
while(n-- >0){
int old_a;
old_a = a;
a=b;
b=old_a+b;
}
return a;
}
在Python中,a, b = b, a + b
存储中间体tuple
在将新值分配给变量之前自动执行,而在 Java 中,您需要明确说明这一点
分解Python的指令,a, b = b, a + b
正在执行此反汇编:
5 17 LOAD_FAST 1 (b)
20 LOAD_FAST 0 (a)
23 LOAD_FAST 1 (b)
26 BINARY_ADD
27 ROT_TWO
28 STORE_FAST 0 (a)
31 STORE_FAST 1 (b)
简单来说,继续使用 python,流程如下:
temp_tuple = (b, a + b)
a, b = temp_tuple
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)