|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
def fibRecur(n):
if n == 1 or n == 2:
return 1
else:
return fibRecur(n-1) + fibRecur(n-2)
原先的函数中,只有一个n,还比较好理解,
def tailFibRecur(n, x, y):
if n == 1 or n == 2:
return y
else:
return tailFibRecur(n-1, y, x+y)
tailFibRecur(12, 1, 1)
这里为什么要有个x 和 y两个参数,x和y是什么意义呢?
- def tailFibRecur(n, x, y):
复制代码
这里面的 x 指前一项, y 指当前项。
- return tailFibRecur(n-1, y, x+y)
复制代码
这里面将当前项 y 和下一项 x+y 分别作为新的 x 和 y 进行计算
举个例子:tailFibRecur(12, 1, 1)
n0 = 12, x0 = 1, y0 = 1
递归后传进的参数分别是:
n1 = 11, x1 = 1, y1 = 2
n2 = 10, x2 = 2, y2 = 3
n3 = 9 , x3 = 3, y3 = 5
n4 = 8 , x4 = 5, y4 = 8
函数要求初始要传入正确的参数,否则不会输出正确的结果。
可以改进这个函数,比如给参数指定默认值。这样初始时不必传入 x 和 y ,只需传入 n 即可
- def tailFibRecur(n, x=1, y=1):
- if n == 1 or n == 2:
- return y
- else:
- return tailFibRecur(n-1, y, x+y)
复制代码
|
|