递归后函数返回None

时间:2014-10-11 16:56:16

标签: python function recursion

我已经编写了一个函数来确定显示器的高度,给定宽度和格式。如果在尝试一行高度值时找不到给定宽度和格式的匹配,则该函数以递归方式运行。如果函数在进入递归之前找到匹配项,则该函数有效,但之后它总是返回none而不是匹配的值对。我很困惑为什么会这样。我在这里错过了一些原则吗?

def getDisplayDimensions(width,FormatX,FormatY):
    Format = float(FormatX)/FormatY
    if FormatX < FormatY:
        return "illegal format."
    for height in range(1,int(width)+1):
        if float(width)/height == float(Format):
            return width,height
            break
        elif height == width:
            getDisplayDimensions(float(width)-1,FormatX,FormatY)

# example call:
print getDisplayDimensions(801,16,9)

1 个答案:

答案 0 :(得分:0)

您实际上并未返回递归调用结果:

elif height == width:
    getDisplayDimensions(float(width)-1,FormatX,FormatY)

在那里添加return

elif height == width:
    return getDisplayDimensions(float(width)-1,FormatX,FormatY)

如果没有return,外部通话就会结束,而是返回默认的None

演示:

>>> def getDisplayDimensions(width,FormatX,FormatY):
...     Format = float(FormatX)/FormatY
...     if FormatX < FormatY:
...         return "illegal format."
...     for height in range(1,int(width)+1):
...         if float(width)/height == float(Format):
...             return width,height
...             break
...         elif height == width:
...             return getDisplayDimensions(float(width)-1,FormatX,FormatY)
... 
>>> print getDisplayDimensions(801,16,9)
(800.0, 450)