意外的 Python 行为 - 函数在 return 语句后无法终止

Unexpected Python behaviour - function fails to terminate after return statement

我写了一个函数 traverseMountain(altitude, stepsleft, substring) 作为 helper 函数来解决其中一个 hackerrank 问题。我认为在编写函数时测试函数是更好的做法,这就是我遇到问题的地方。

#!/bin/python3

import math
import os
import random
import re
import sys

# Complete the countingValleys function below.
def countingValleys(n, s):
    altitude = 0
    mountiansCount = 0
    valleysCount = 0
    def tailRecurseSolution(stepsleft, substring):
        head, tail = substring[0], substring[1:]
        if (head == 'U'):
            mountiansCount+=1
            traverseMountain(n-1, tail)
        if (head == 'D'):
            traverseValley(altitude+1, n-1, tail)
    

#    return valleysCount

    
def traverseMountain(altitude, stepsleft, substring):
    head, tail = substring[0], substring[1:]
    if (head=="D"):
         altitude-=1
    if (head=="U"):
         altitude+=1
    stepsleft-=1
    if (altitude<=0 or stepsleft<=0 or (not tail)):
        x = stepsleft
        return x
    elif (altitude>0 and stepsleft>0 and tail):
        traverseMountain(altitude, stepsleft,tail)


#def traverseValley(alt, stepsleft, substring):
#    return x

if __name__ == '__main__':
    altitude = 0
    stepsleft = 99
    path = "UUUDUDDD"
    print(traverseMountain(altitude, stepsleft, path))

您可以忽略 countingValleys 函数,因为它不完整且未被调用。

我期待的是函数traverseMountian满足if条件,在最后一次递归调用时(当altitude变量为0或tail为空字符串时)进入块然后退出函数和 return stepsLeft 变量的值。

我看到的是我的调试器进入了 if 语句,但立即跳转到 elif 语句(我不明白为什么会那样做)并且我收到的变量被重置?

我想在这里做一个 post 以防它是代码的预期行为 我今天花了很多时间试图弄清楚为什么 Python 在 return 语句之后没有终止函数。我已经尝试了条件语句、return 语句的放置等,但没有成功。

您 returning x 但在递归调用中您没有对 return 值执行任何操作。

您可能希望 return traverseMountain(altitude, stepsleft,tail) 作为 traverseMountain?

中的最后一行