我试图在python中打印一个实际上像Fibonacci的系列,但不是添加你必须繁殖.
我的代码是:
def robLan(n):
if n > 3:
robLan(n -1) * robLan(n - 2)
elif n == 1:
return 1
elif n == 2:
return 2
elif n == 3:
return 2
list = []
for i in range(1,10):
z = robLan(i)
list.append(z)
print list
Run Code Online (Sandbox Code Playgroud)
这些是我得到的错误:
File "C:\Users\Arjun's\Documents\Aptana Studio 3 Workspace\List\com\__init__.py", line 16, in <module>
z = robLan(i)
File "C:\Users\Arjun's\Documents\Aptana Studio 3 Workspace\List\com\__init__.py", line 3, in robLan
robLan(n -1) * robLan(n - 2)
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
您的函数不会返回递归调用:
if n > 3:
robLan(n -1) * robLan(n - 2)
Run Code Online (Sandbox Code Playgroud)
如果没有return语句,则函数在没有显式返回的情况下结束,None而是返回:
>>> robLan(4) is None
True
Run Code Online (Sandbox Code Playgroud)
上面应该返回4(roblan(3) * roblan(2)给出2 * 2是4).对于任何5或更高的起始值,函数使用多个递归级别,并且None返回值最终用于乘法.
添加return:
if n > 3:
return robLan(n - 1) * robLan(n - 2)
Run Code Online (Sandbox Code Playgroud)
您的陈述可以简化:
def robLan(n):
if n > 2:
return robLan(n - 1) * robLan(n - 2)
return n
Run Code Online (Sandbox Code Playgroud)
然后您的示例循环生成:
[1, 2, 2, 4, 8, 32, 256, 8192, 2097152]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
162 次 |
| 最近记录: |