我正在尝试在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
这是我得到的错误:
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'
这里有什么问题?
答案 0 :(得分:5)
您的函数不会返回递归调用:
if n > 3:
robLan(n -1) * robLan(n - 2)
这里没有return语句,你的函数在没有显式返回的情况下结束,而是返回None
:
>>> robLan(4) is None
True
以上应已返回4
(roblan(3) * roblan(2)
,2 * 2
为4
。None
。对于任何5或更高的起始值,函数使用多个递归级别,return
返回值最终用于乘法。
添加if n > 3:
return robLan(n - 1) * robLan(n - 2)
:
def robLan(n):
if n > 2:
return robLan(n - 1) * robLan(n - 2)
return n
您的陈述可以简化:
[1, 2, 2, 4, 8, 32, 256, 8192, 2097152]
然后您的样本循环生成:
{{1}}
答案 1 :(得分:1)
你应该在n&gt;时返回一个值3
答案 2 :(得分:0)
这是完整的更正代码:
def robLan(n):
if n > 3:
return 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