【发布时间】:2020-05-18 15:13:52
【问题描述】:
我写了一个函数来 traverseMountain(altitude, stepsleft, substring) 作为一个辅助函数来解决一个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 条件,并且会在最后一次递归调用时进入块(当高度变量为 0 或尾部为空字符串时)然后退出函数并返回stepsLeft变量的值。
我所看到的是我的调试器进入了 if 语句,但立即跳转到 elif 语句内部(我不明白为什么会这样做)并且我收到的变量被重置?
我想在这里发一个帖子,以防它是代码的预期行为 今天我花了很多时间试图弄清楚为什么 Python 没有在 return 语句之后终止函数。我已经使用了条件、return 语句的放置等,但没有成功。
【问题讨论】:
-
你不需要那些图片;无论如何,它们是不可读的。问题是您没有从递归调用返回返回值。
标签: python python-3.x visual-studio-code tail-recursion