为何递归实现的连续8判断函数无返回值?与循环实现的差异
递归版与循环版函数的差异及递归无返回值原因分析
两者核心差异
- 执行逻辑与返回路径:
- 循环版(Function2):通过迭代逐位检查相邻数字,只要找到连续8就立刻返回
True,遍历完所有可能还没找到就返回False,每一条执行分支都有明确的返回值。 - 递归版(Function1):通过不断将数字除以10缩小处理规模,但只有当当前数字最后两位是88时才会返回
True,其他递归分支没有传递返回结果,导致多数场景下函数没有有效返回值。
- 循环版(Function2):通过迭代逐位检查相邻数字,只要找到连续8就立刻返回
递归版无返回值的关键原因
递归函数的核心要求是把下层递归的结果传回上层调用,你的递归版应该是犯了这个常见错误:
# 错误的递归实现示例(和你的代码逻辑类似) def Function1(n): if n < 10: print("数字不足两位") elif n % 100 == 88: return True else: Function1(n // 10) # 这里没有return递归调用的结果!
举个例子:传入188时,第一次调用Function1(188)进入else分支,调用Function1(18);Function1(18)又进入else,调用Function1(1);Function1(1)执行完print后没有返回任何值,所以上层的Function1(18)也没有返回值,最终整个函数调用默认返回None,自然看不到预期的True/False。
只有当输入数字最后两位是88时,函数直接触发return True,这时候才有明确的返回结果。
修复后的递归版
要让递归版正常工作,只需要在递归调用时返回它的结果:
def Function1(n): if n < 10: return False if n % 100 == 88: return True return Function1(n // 10) # 把递归结果传回上层
内容的提问来源于stack exchange,提问作者Aryan V
相关产品推荐
相关产品推荐

