2014-10-11 5 views
0

주어진 폭과 형식으로 디스플레이의 높이를 결정하는 함수를 작성했습니다. 이 함수는 높이 값의 행을 시도하면서 주어진 너비와 형식에 일치하는 항목을 찾을 수 없으면 재귀 적으로 작동합니다. 이 함수는 재귀에 들어가기 전에 일치하는 항목을 찾으면 작동하지만 그 이후에는 항상 일치하는 값 쌍이 아닌 none을 반환합니다. 왜 그런지 나는 혼란 스럽다. 여기에 어떤 원리가 빠져 있습니까?재귀 후 함수가 없음을 반환합니다.

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

return 추가 :

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

당신은 실제로 재귀 호출의 결과를 반환하지 않습니다

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

아, 감사합니다. 그렇다면 실제로 여기에 대한 이해가 근본적으로 부족합니다. 왜냐하면 반환이 호출되는 함수 내에있는 경우 호출에 return 문이 필요한 이유는 이해할 수 없기 때문입니다. –

+1

@ user3578468 : 그 시점에서 * 다른 함수 *를 호출하는 것을 상상해보십시오. 대신에'set ([float (width) -1, FormatX, FormatY])'라고 말한 것입니다. '귀환 '을 놓친 경우 어떻게 될 것이라고 생각하십니까? 재귀 함수를 호출하는 것은 다르지 않지만 여전히 결과를 반환해야합니다. –

+0

고마워요. –

관련 문제