Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python—从函数本身调用函数_Python_Function_Math_Recursion_Expression - Fatal编程技术网

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,你的短语“当你想产生一个更干净的解决方案时”是观点而不是事实。在处理递归数据时应该使用递归,以及类似的特定原因。清洁与此无关。我很惊讶这个编辑被批准了。