我在python中尝试一个简单的递归问题,但被python中的for-loop-esq实现难住了。该实现使用range(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);
java实现永远不会给出正确的答案(75025),因为num
在for循环(num = f1 + f2
)的第一行中被重写。在python中,代码执行并提供正确的答案。怎么会这样?python是否在幕后实现了某种i
计数器?我使用pyCharm调试器来测试这一点。
发布于 2018-06-07 02:15:42
在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);
发布于 2018-06-07 02:13:00
我的猜测是,range(1, num, 1)
中的函数只在range(1,25,1)
中看到类似这样的东西,或者换句话说,它是带有通过值传递的参数的函数。
函数范围的返回值应该类似于[1,2,3 ...25]
。
https://stackoverflow.com/questions/50726667
复制相似问题