簡體   English   中英

Python與Java,For-Loop

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM