[英]Java 8 for-loop inconsistency: List of BinaryOperator vs List of Integer
[英]Python vs Java, For-Loop
我在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調試器進行測試。
在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);
我的猜測是range(1, num, 1)
中的函數只能在range(1,25,1)
看到類似的東西,換句話說,它是帶有通過值傳遞參數的函數。
函數范圍的返回值應類似於[1,2,3 ...25]
。
我相信不同之處在於Python中的range函數具有按值傳遞的參數。 因此,即使在為num變量賦予新值之后,該函數仍會保留您最初給它的25個變量,因此迭代25次。
在Java中,循環在每次迭代后檢查num的值,以查看何時停止。 由於num的值在第一次迭代期間更改為1,因此它符合停止循環的條件,因此僅迭代一次。
我希望這是有道理的!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.