2014-11-16 2 views
1
def count_vowels(s): 
    if not s: 
     return 0 
    elif s[0] in VOWELS: 
     return 1 + count_vowels(s[1:]) 
    else: 
     return 0 + count_vowels(s[1:]) 

이 코드는 문자열의 모음 수를 찾는 데 완벽하게 작동합니다. 재귀가 항상 기본 사례를 요구한다는 것도 이해합니다. 이 코드의 주요 문제는 첫 번째 if 문이 실제로 의미하는 것입니다. 무엇을 검사하고 있습니까?파이썬 재귀 모음 수

if not s: 
    return 0 

그 부분없이 코드를 작성하는 방법이 있습니까?

답변

1

if not s 문자열이 비어 있는지 확인합니다. 빈 문자열은 파이썬에서 "거짓 - y"객체입니다. 문자열이 비어 있으면 모음이 없어야합니다.

나는 당신이 아마 여기에 재귀를 사용하는 데 필요한 실현, 그러나 이것은 실제로 그것을 할 수있는 더 좋은 방법이 될 것입니다 : 이것은 재귀에서 출구

>>> VOWELS = set('aeiou') 
>>> def count_vowels(s): 
...  return sum(x in VOWELS for x in s) 
... 
>>> count_vowels('hello world') 
3 
+0

설명해 주셔서 감사합니다. 루프에 대한 예는이 시점에서 재귀보다 더 이상적으로 보일 수 있지만 그러한 것은 할당입니다. – b0b0

2

입니다. 재귀는 어느 시점에서 멈춰야합니다 (그렇지 않으면 영원히 계속 실행됩니다).

문자열이 비어 있으면 - 0을 반환하고 (빈 문자열에는 모음이 없음), 중지됨을 의미합니다.

+0

아, 감사합니다. 대단히 감사합니다. – b0b0