Python中的递归无法正常工作

3
我会尽力提供帮助,以下是您需要翻译的内容:

我想在Python中打印一系列数字,类似于斐波那契数列,但不是相加而是相乘。

我的代码如下:

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'

这里有什么问题?

1
你在第一个 if 块中缺少了 return - falsetru
3个回答

5

你的函数没有返回递归调用:

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

如果没有返回语句,你的函数将在没有明确返回值的情况下结束,并返回None

>>> robLan(4) is None
True

以上代码应该返回 4roblan(3) * roblan(2) 给出 2 * 24)。对于任何起始值大于等于5的情况,该函数将使用多个递归层级,并且在乘法中使用了 None 返回值。
添加 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

当 n > 3 时,您应该返回一个值。


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 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接