2012-04-01 72 views
-3
#Calculates to the index position of a fib number. 
def f3(n): 
    if n < 2: 
     return n 
    return f3(n-2) + f3(n-1) 

該函數只接受一個參數,但兩個正在返回中發送,但它的工作原理!這裏發生了什麼事?級聯和遞歸

如果我返回f3(n-3),則該函數發生故障。連接有什麼影響?

回答

5

新增結果爲單個值。

>>> 1 + 2 
3 
>>> [1] + [2] 
[1, 2] 
1

Python在返回它之前評估表達式f3(n-2) + f3(n-1),所以它實際上返回它們的值組合。 f3(n-2)的情況也是如此,其首先評估n-2,然後將其作爲值傳遞給f3()

返回參數的數量與函數作爲輸入參數的數量無關。

+0

當我嘗試使用(n-3)func分解。爲什麼我必須在返回中連接兩個? – pythondjango 2012-04-01 21:22:04

+0

@pythondjango:你在哪裏看到連接?這裏沒有連接。 – cha0site 2012-04-01 21:24:11

+1

當你只使用'f3(n-3)'而不是'f3(n-2)+ f3(n-1)'?它因爲斐波那契遞歸的工作方式。 我認爲這可能有助於理解它是如何工作的:http://ozark.hendrix.edu/~burch/csbsju/cs/160/notes/29/0.html 。 – veiset 2012-04-01 21:26:42

0

f3(n-2) + f3(n-1)是隻返回一個值,計算f3用於輸入n-2,然後添加該值來對輸入計算f3的結果的結果n-1

在Python,該機構用於返回從功能的多個值是由包裝他們一個元組裏面,然後在調用函數時提取它們例如(在你的問題不是這樣的!):

def multivalue(x, y) 
    return (x, y) 

a, b = multivalue(5,10) 
# here a holds 5, and b holds 10