2014-02-23 2 views
1

문자열의 알파벳 문자 수를 반환 (인쇄하지 않음)하기위한 재귀 함수에서 작업하고 있습니다. 반복을 통해이 작업을 수행하는 것이 매우 쉽지만 이해 하겠지만 내 목표는 재귀 적으로 수행하는 것입니다. 필자가 작성한 함수는 처음 호출 될 때 제대로 실행되지만 다음 실행 전에 카운터를 재설정 할 수있는 방법을 찾을 수 없습니다. 여기에 내가 가진 무엇 : 나는 다른 변수에 카운터의 값을 할당하고 카운터를 재설정 시도했다하지만 난 그 값을 추출하고 여전히 다시 한 관리 할 수 ​​없습니다재귀 후 카운터 재설정

counter = 0 
def recAlphaCount(s): 
    global counter 

    if len(s) == 0: 
     return 0 
    else: 
     if s[0].isalpha(): 
      counter += 1 

     recAlphaCount(s[1:]) 
     return counter 

.

글로벌 카운터를 사용하지 않고 재귀 적으로 이것을 작성할 수 있습니까? 아니면 카운터를 반환하고 함수 내에서 재설정하는 방법이 있습니까?

감사

답변

2

당신이

def recAlphaCount(s, counter = 0): 
    if len(s): 
     counter = recAlphaCount(s[1:], counter + int(s[0].isalpha())) 
    return counter 

이 같은 매개 변수 자체의 수를 유지할 수는 명시 적으로 카운트를 유지하지 않고, 다음과 같이 해결할 수 있습니다.

def recAlphaCount(s): 
    if len(s) == 0: 
     return 0 
    elif s[0].isalpha(): 
     return 1 + recAlphaCount(s[1:]) 
    else: 
     return recAlphaCount(s[1:]) 

def recAlphaCount(s): 
    if len(s) == 0: 
     return 0 
    return int(s[0].isalpha()) + recAlphaCount(s[1:]) 
+0

내가 INT (부울)를 몰랐어요 0 또는 1, 이것은 훌륭한 솔루션입니다 반환합니다. 감사합니다 – eeyore

+0

@eeyore 당신은 환영합니다 :) – thefourtheye

0

global 변수로 단축 할 수는 거의 정답 없습니다! 당신은 제로에 디폴트 counter 인수를하고 약간 리팩토링 수 :

def recAlphaCount(s, counter=0): 
    if len(s) == 0: 
     return counter 
    else: 
     if s[0].isalpha(): 
      counter += 1 
     return recAlphaCount(s[1:], counter) 
+0

이것은 좋은 생각이지만, 내 문제는 엄격하게 사용되는 매개 변수를 미리 정의합니다. 고마워,이 통찰력이있다. – eeyore