我已经编写了一个函数来确定显示器的高度,给定宽度和格式。如果在尝试一行高度值时找不到给定宽度和格式的匹配,则该函数以递归方式运行。如果函数在进入递归之前找到匹配项,则该函数有效,但之后它总是返回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)
答案 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)