2012-04-01 77 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