递归 python - 计算字符串中的元音
Recursion python - counting vowels in a string
以下代码来自 geeks for geeks - link
当我在 pythontutor.com 上逐行可视化代码时,我了解到 n 正在通过递归 countVowels() 函数减少到 1。但是,我不明白 n 是如何通过函数 isVowel() 的递归再次增加的。
P2 - 我也不明白为什么 pythontutor 上的第 27 步返回到 isVowel() 并在该行已经为 n = 1 执行时将 n 增加到 2。我的意思是它应该转到下一个 return 直接函数 (return(countVowels(str, n-1) + isVowel(str[n-1]))
请帮帮我。
def isVowel(ch):
return ch.upper() in ['A', 'E', 'I', 'O', 'U']
#count no of vowels from 0 to n
def countVowels(str, n):
if(n==1):
return isVowel(str[n-1])
return(countVowels(str, n-1) + isVowel(str[n-1]))
str = 'abc de'
print(str[0])
print(countVowels(str, len(str)))
看看这些函数是如何求值的:
countVowels("abc", 3) = countVowels("abc", 2) + isVowel("abc"[2])
= (countVowels("abc", 1) + isVowel("abc"[1])) + isVowel("abc"[2])
= ((isVowel("abc"[0])) + isVowel("abc"[1])) + isVowel("abc"[2])
= ((True) + False) + False
= 1
必须先解决对 countVowels
的递归调用,然后再计算 isVowel()
,因为 Python 从左到右,从内到外计算表达式(如嵌套表达式的情况,例如 (x + 1)**2
。
以下代码来自 geeks for geeks - link 当我在 pythontutor.com 上逐行可视化代码时,我了解到 n 正在通过递归 countVowels() 函数减少到 1。但是,我不明白 n 是如何通过函数 isVowel() 的递归再次增加的。
P2 - 我也不明白为什么 pythontutor 上的第 27 步返回到 isVowel() 并在该行已经为 n = 1 执行时将 n 增加到 2。我的意思是它应该转到下一个 return 直接函数 (return(countVowels(str, n-1) + isVowel(str[n-1]))
请帮帮我。
def isVowel(ch):
return ch.upper() in ['A', 'E', 'I', 'O', 'U']
#count no of vowels from 0 to n
def countVowels(str, n):
if(n==1):
return isVowel(str[n-1])
return(countVowels(str, n-1) + isVowel(str[n-1]))
str = 'abc de'
print(str[0])
print(countVowels(str, len(str)))
看看这些函数是如何求值的:
countVowels("abc", 3) = countVowels("abc", 2) + isVowel("abc"[2])
= (countVowels("abc", 1) + isVowel("abc"[1])) + isVowel("abc"[2])
= ((isVowel("abc"[0])) + isVowel("abc"[1])) + isVowel("abc"[2])
= ((True) + False) + False
= 1
必须先解决对 countVowels
的递归调用,然后再计算 isVowel()
,因为 Python 从左到右,从内到外计算表达式(如嵌套表达式的情况,例如 (x + 1)**2
。