La función devuelve Ninguna después de la recursión

He escrito una función para determinar la altura de una pantalla, dado un ancho y un formato. La función opera de forma recursiva, si no puede encontrar una coincidencia para el ancho y el formato dados al probar una fila de valores de altura. La función funciona, si encuentra una coincidencia antes de entrar en la recursión, pero después de eso siempre devuelve ninguno y no el par de valores coincidentes. Estoy muy confundido en cuanto a por qué es eso. ¿Me estoy perdiendo algún principio aquí?

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) 

En realidad no está devolviendo el resultado de la llamada recursiva:

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

Añadir return allí:

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

Sin el return la llamada externa simplemente finaliza y devuelve el valor predeterminado None lugar.

Manifestación:

 >>> 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)