Python vs Java,For循环

Python vs Java,For循环,java,python-3.x,debugging,Java,Python 3.x,Debugging,我在python中尝试一个简单的递归问题,但被python中的for循环esq实现难倒了。该实现使用范围(x,y,z)函数 以下是python中的代码: num = 25 f1 = 0 f2 = 1 for num in range(1,num,1): num = f1 + f2 f1 = f2 f2 = num print("num is : ", num) java中的相同代码: int num = 25; int f1 = 0; int f2 = 1; for

我在python中尝试一个简单的递归问题,但被python中的for循环esq实现难倒了。该实现使用范围(x,y,z)函数

以下是python中的代码:

num = 25
f1 = 0
f2 = 1

for num in range(1,num,1):
    num = f1 + f2
    f1 = f2
    f2 = num

print("num is : ", num)
java中的相同代码:

int num = 25;
int f1 = 0;
int f2 = 1;
for(int i = 1; i < num; i++){
    num = f1 + f2;
    f1 = f2;
    f2 = num;
}
System.out.println("# at 25 is : " + num);
int num=25;
int f1=0;
int f2=1;
for(int i=1;i
java实现永远不会给出正确的答案(75025),因为for循环的第一行(
num=f1+f2
)中覆盖了
num
)。 在python中,代码执行并提供正确的答案。怎么会?python是否在引擎盖下实现了某种
i
计数器?
我正在使用pyCharm调试器来测试这个

我猜
范围(1,num,1)
中的函数只在
范围(1,25,1)
中看到类似的内容,或者换句话说,它是带有按值传递的参数的函数


函数范围的返回值应该类似于
[1,2,3…25]

在for循环的第一次迭代中,您将num设置为1(
num=f1+f2
)。由于循环条件中使用了
num
,因此循环将在第一次迭代后停止。要使其与python代码的工作方式相同,您需要另一个变量,并将
num
保持在25

    int num = 25;
    int f1 = 0;
    int f2 = 1;
    int res = 0;
    for (int i = 1; i < num; i++) {
        res = f1 + f2;
        f1 = f2;
        f2 = res;
    }
    System.out.println("# at 25 is : " + res);
int num=25;
int f1=0;
int f2=1;
int res=0;
for(int i=1;i
我认为区别在于Python中的range函数具有按值传递的参数。因此,即使给num变量一个新值,函数仍然保持原来给它的25,因此迭代25次

在Java中,循环在每次迭代后检查num的值,查看何时停止。由于num的值在第一次迭代期间更改为1,因此它满足停止循环的条件,因此它只迭代一次


我希望这是有道理的

这不是递归,递归是当函数调用自身时,这里不是这种情况,您只是在循环,尽管
java
python
之间的行为不同,为什么您需要更改应该用于控制循环的变量?如果要执行25次,请不要更改变量。如果您想要更“灵活”的循环,请使用
while
instead@ArthurAttout你说得对,我在尝试这个问题的for循环实现。@RicardoPontual整个问题源于打字错误和好奇心。我知道正确的实施方法是什么Lars这不是问题所在。谢谢,啊!这是有道理的。现在,我正在下降到一个“参考传递vs价值传递”的兔子洞。第一个合理的答案。谢谢我很高兴我能帮助澄清!