在做一道练习题(参照下篇博文《在当前目录下递归的查找包含指定字符串的文件》)的时候,发现函数中的return的值竟然是None,百思不得其解,尝试化繁为简,用以下的简单的代码验证了一下
问题版本代码:为什么return i 返回的是 i , 而print(i)得到的是 0
def func(i): if i == 0: print(i) return i elif i > -2: i = i-1 func(i) print(func(3)) 运行结果: 0 None
如果把递归过程画成流程图,或许更容易理解一些
case1: 有递归的情况
case2: 无递归的情况
错误的解决方案:
def func(i): if i == 0: print(i) return i elif i > -2: i = i-1 func(i) return(i) print(func(3)) 运行结果: 0
仍然图解一下,更直观
正确的解决方案一:
def func(i): if i == 0: print(i) return i elif i > -2: i = i-1 return(func(i)) print(func(3)) 运行结果: 0 0
正确的解决方案二:
result = None def func(i): if i == 0: print(i) global result result = i elif i > -2: i = i-1 func(i) return result print(func(3)) 运行结果: 0 0