python - 从自身内部调用函数

Posted

技术标签:

【中文标题】python - 从自身内部调用函数【英文标题】:python - calling a function from within itself 【发布时间】:2015-05-18 08:21:09 【问题描述】:

我已经拥有的代码是用于接收数学表达式并计算它的机器人。现在我让它做乘法,除法,减法和加法。但问题是我想建立对括号和括号内的括号的支持。为此,我需要首先为括号内的表达式运行我为不带括号的表达式编写的代码。我将检查"(" 并将其中的表达式附加到列表中,直到它到达")",除非它首先到达另一个"(",在这种情况下,我将在列表中创建一个列表。我会做减法、乘法和除法,然后把剩下的数字加在一起。

那么是否可以从自身内部调用定义/函数?

【问题讨论】:

【参考方案1】:

是的,在“python 递归”中是可能的 最好的描述是:“一个物理世界的例子是放置两个相互面对的平行镜子。它们之间的任何物体都将被递归反射”

【讨论】:

【参考方案2】:

是的,正如@Daniel Roseman 所说,这是一种称为递归的基本编程技术。

与迭代版本相比,当您想要生成更简洁的解决方案时,应使用递归而不是迭代。但是,递归通常比迭代更昂贵,因为它需要在每次调用递归函数时缠绕或将新的堆栈帧推入调用堆栈——这些操作占用时间和堆栈空间,这可能导致称为堆栈溢出的错误如果堆栈帧消耗了为调用堆栈分配的所有内存。

这是一个 Python 的例子

def recur_factorial(n):
   """Function to return the factorial of a number using recursion""" 
   if n == 1:
      return n
   else:
      return n*recur_factorial(n-1) 

For more detail, visit the github gist that was used for this answer

【讨论】:

@Givemeanswersnow,您所说的“当您想要产生更清洁的解决方案时”是意见而非事实。处理递归数据时应使用递归,以及类似的特定原因。清洁与它无关。我很惊讶这个编辑被原样批准了。【参考方案3】:

是的,这是一种称为 recursion 的基本编程技术,它通常用于您描述的那种解析场景。

只要确保你有一个基本情况,这样递归就会在你到达底层时结束,而你最终不会无限调用自己。

(当你谷歌递归时,还要注意复活节彩蛋:“你的意思是递归吗?”)

【讨论】:

一些例子***.com/questions/479343/…

以上是关于python - 从自身内部调用函数的主要内容,如果未能解决你的问题,请参考以下文章

echo 在函数内部还是外部?从自身调用函数?

js 函数内部创建的setTimeout调用自身函数

为啥我不能从内部调用一个类的 start 函数?

六. python进阶(递归)

如何在类内部从自身调用方法?

Python小白学习之路(十三)—递归调用