递归 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