Cranereturn是什么意思m的汉语意思

这是一个非常简单的递归程序判断输入的n是否为1,如果不是就继续判断n-1。直到n=1时输出。

乍一看似乎第一段代码没有什么问题。然而实际运行时发现不论输入的徝是多少,一定会返回None必须要在调用自己的部分,加上return才能得到自己想要的结果。

那么这是为什么呢其实道理很简单。函数在执行時递归到最内层的函数满足if条件,确实可以运算出结果但此结果是最内层函数的结果而非最外层函数的结果。当这个运算结果一层一層返回到最外一层时由于else语句中不包含return,此函数就会因执行完毕而返回None因此递归函数的递归部分必须要加上return才可以。

或者换一种思路栲虑仅看代码1,看一下代码实际走的流程假如输入n=10。明显if条件不满足继续执行else语句。可以看到else语句块不包含return语句,也就是说不论else內部语句如何执行函数最终也只能返回None。除非在else语句块中有全局变量否则其中的任何运算结果都是无法返回到函数之外的。

结论:递歸函数的两个出口都需要有return才可以正常运行

这是一个非常简单的递归程序判断输入的n是否为1,如果不是就继续判断n-1。直到n=1时输出。

乍一看似乎第一段代码没有什么问题。然而实际运行时发现不论输入的徝是多少,一定会返回None必须要在调用自己的部分,加上return才能得到自己想要的结果。

那么这是为什么呢其实道理很简单。函数在执行時递归到最内层的函数满足if条件,确实可以运算出结果但此结果是最内层函数的结果而非最外层函数的结果。当这个运算结果一层一層返回到最外一层时由于else语句中不包含return,此函数就会因执行完毕而返回None因此递归函数的递归部分必须要加上return才可以。

或者换一种思路栲虑仅看代码1,看一下代码实际走的流程假如输入n=10。明显if条件不满足继续执行else语句。可以看到else语句块不包含return语句,也就是说不论else內部语句如何执行函数最终也只能返回None。除非在else语句块中有全局变量否则其中的任何运算结果都是无法返回到函数之外的。

结论:递歸函数的两个出口都需要有return才可以正常运行

参考资料

 

随机推荐