python - 为什么 rreverse 函数需要两个条件分支?

标签 python python-3.x recursion

我做了一个练习,并尝试使用我在这里找到的部分代码来解决另一个人的问题,但我发现我需要一部分代码,但我不知道为什么要这样做。

我用于我的函数的完整代码是这样的:

def rreverse(s):
    if s == "":
        return s
    else:
        return rreverse(s[1:]) + s[0]

但是我只是把else当成一个语句,并没有得到我希望的结果。

def recur_reverse(x):
    if x != "":
        return recur_reverse(x[1:]) + x[0]

我收到 TypeError 提示“+ 不支持的操作数类型:'NoneType' 和 'str'。”

第一个示例工作正常而第二个示例抛出错误的背后逻辑是什么,区别在于这个 if 语句?为什么我的版本不正确?

谢谢!

最佳答案

第二个构造的问题在于,如果 s 是空字符串,则该函数返回不是字符串的 None,而最终调用者 expects 一个字符串,即使是空的,所以返回 None 将使调用者代码中断(这会导致类似 Why does my function return None? 的问题)

你可以用三元表达式来编写它,以确保它返回任何 x

的值
def recur_reverse(x):
    return recur_reverse(x[1:]) + x[0] if x else ""

关于python - 为什么 rreverse 函数需要两个条件分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52497333/

相关文章:

python - 修复 QTreeWidget 上的选定项目荧光笔

c++ - 在 C++11 中实现递归代理模式

algorithm - 二叉树遍历的栈帧

python - 常驻后端 Google App Engine "/_ah/background"(Python)

python - 如何解决 python 中的总线错误(核心转储)?

python - python中如何根据日期对数据进行排序

python - pyodbc导入错误: DLL load failed: The specified module could > not be found

python - 如何将 Python virtualenv 移动到不同的系统(计算机)并使用站点包中存在的包

python - 使用 'pass' 作为字典关键字

Java二叉搜索树递归删除删除元素