递归在python中不起作用

时间:2013-09-07 12:31:55

标签: python python-2.7

我正在尝试在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'

这里有什么问题?

3 个答案:

答案 0 :(得分:5)

您的函数不会返回递归调用:

if n > 3:
    robLan(n -1) * robLan(n - 2)

这里没有return语句,你的函数在没有显式返回的情况下结束,而是返回None

>>> robLan(4) is None
True

以上已返回4roblan(3) * roblan(2)2 * 24None。对于任何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