2010-04-01 2 views
1

스택을 증가 및 감소시키는 함수가 있습니다.파이썬 : 함수의 후속 호출을 위해 함수의 기본값을 다시 초기화하십시오.

나는 그에게 여러 번 전화를해야하고, 나는 예상대로이 기본값을 다시 사용하지 않는, 후속 호출

에서 동일한 방식으로 작동하지만 싶습니다.

나는이 초보자 트랩입니다 읽었습니다 내가 제안 된 솔루션을 본 적이 있지만 나는 어떤 솔루션 작업을 할

수 없었다. 그것은 좋은 것

는 "fun.reset"

def a(x, stack = [None]): 
    print x,' ', stack 
    if x > 5: 
     temp = stack.pop() 
    if x <=5: 
     stack.append(1) 
    if stack == []: 
     return  
    a(x + 1) 

print a(0) 
print a(2) #second call 
print a(3) #third call 

나는 일이 예상 할 수 있지만, 그렇지 않습니다.

print a(0, [None]) 
print a(2, [None]) #second call 
print a(3, [None]) #third call 

기능을 초기 상태로 재설정 할 수 있습니까?

도움을 주시면 감사하겠습니다.

답변

4

그냥 명시 적으로 스택을 통과 :

def a(x, stack=None): 
    if stack is None: 
     stack = [None] 
    ... 
    a(x + 1, stack) 
+0

그게 전부 야. 그것이 나에게 지적 되었으니 분명하다. 감사 –

3
def a(x, stack = None): 
    if stack is None: 
     stack = [None] 
    ... 
+1

이 작동하지 않습니다. 재귀 호출이 스택에 값을 전달하지 않으면 으로 스택을 [없음]으로 다시 초기화합니다. –

+0

그러나 당신이 내 추론의 주요한 잘못을 지적했음을 고맙게 생각합니다. 감사합니다 –

+0

물론, 나는 루카스가 집에 가져 왔기 때문에 기쁩니다. – Kai

0

이 문제는 변경할 수있는 기본 인수를 수정하기 때문에 발생합니다. 카이 (Kai)의 답변에서와 마찬가지로, 보통 기본 주장을 수정하지 않음으로써이를 해결합니다. 재귀 호출을 할 때

관련 문제