python—从函数本身调用函数
我已经有了一个机器人的代码,它接收一个数学表达式并进行计算。现在我让它做乘法、除法、减法和加法。但问题是我想建立对括号和括号内括号的支持。为了实现这一点,我需要首先运行我为表达式编写的代码,而不使用括号来表示括号内的表达式。我要检查python—从函数本身调用函数,python,function,math,recursion,expression,Python,Function,Math,Recursion,Expression,我已经有了一个机器人的代码,它接收一个数学表达式并进行计算。现在我让它做乘法、除法、减法和加法。但问题是我想建立对括号和括号内括号的支持。为了实现这一点,我需要首先运行我为表达式编写的代码,而不使用括号来表示括号内的表达式。我要检查”(“并将其中的表达式附加到一个列表中,直到它到达一个”)“除非它到达另一个”(“首先在列表中创建一个列表。我将减法、乘法和除法,然后将剩下的数字相加 那么,是否可以从定义/函数本身调用定义/函数呢?是的,这是一种基本的编程技术,通常用于您描述的解析场景 只要确保你有
”(“
并将其中的表达式附加到一个列表中,直到它到达一个”)“
除非它到达另一个”(“
首先在列表中创建一个列表。我将减法、乘法和除法,然后将剩下的数字相加
那么,是否可以从定义/函数本身调用定义/函数呢?是的,这是一种基本的编程技术,通常用于您描述的解析场景 只要确保你有一个基本情况,这样递归就在你到达底层时结束,而不是无限地调用你自己
(也请注意谷歌递归时的复活节彩蛋:“你是指递归吗?”)是的,正如@Daniel Roseman所说,这是一种称为递归的基本编程技术 当您想要生成比迭代版本更干净的解决方案时,应该使用递归而不是迭代。但是,递归通常比迭代更昂贵,因为它需要在每次调用递归函数时缠绕,或将新的堆栈帧推到调用堆栈上——这些操作占用时间和stack空间,如果堆栈帧占用分配给调用堆栈的所有内存,则可能导致称为堆栈溢出的错误 下面是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)
examples@Givemeanswersnow,你的短语“当你想产生一个更干净的解决方案时”是观点而不是事实。在处理递归数据时应该使用递归,以及类似的特定原因。清洁与此无关。我很惊讶这个编辑被批准了。