2013-09-07 2 views
3

파이썬에서 실제로 피보나치를 좋아하는 시리즈를 인쇄하려고하지만 추가하는 대신에 곱해야합니다.재귀가 파이썬에서 작동하지 않습니다

내 코드는 다음과 같습니다

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' 

여기에 어떤 문제가 :

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 

이 내가 얻을 오류가 있습니까?

+1

첫 번째'if' 블록에'return'이 없습니다. – falsetru

답변

5

재귀 호출 반환하지 않습니다 기능 : 여기 return 문없이

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

, 당신의 함수는 명시 적 반환하지 않고 종료하고 None 대신 반환됩니다 위의

>>> robLan(4) is None 
True 

4 (roblan(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

(수정 된) 코드를 예제로 제공해주십시오. –

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 
관련 문제