如果我有类似的功能:
def function(some number, steps):
if steps == 1: return 1
result = some calculation + function(some number, steps - 1)
return round(result, 2)
返回一些浮点数。
我的问题是:只有当我从整个函数返回结果而不是从递归调用返回结果时,才有办法返回舍入结果(以节省计算精度)。
希望你能理解我的问题。
预先感谢。
答案 0 :(得分:2)
通常来说,如果您想检测到自己在Python的递归调用中,则可以向函数添加默认参数,如下所示:
def my_func(arg1, arg2, _inside_recursion=False):
# Default calls will have _inside_recursion as False
# Make sure that your recursive calls set the parameter
recursive_result = my_func(arg1, arg2, _inside_recursion=True)
答案 1 :(得分:2)
您无法区分是在递归过程中还是在第一步中调用当前函数。但是,您可以引入一个新函数,该函数将调用现有函数并进行其他四舍五入。
def internal_function(some number, steps):
if steps == 1: return 1
return some calculation + function(some number, steps - 1)
def function(some_number, steps):
return round(internal_function(some_number, steps), 2)
编辑:确实,向函数添加可选参数的方法也可以使用,但它有两个缺点:
答案 2 :(得分:2)
是的!您可以提供一个将被连续调用触发的标志:
def function(some number, steps, do_rounding=True):
if steps == 1:
return 1
result = some calculation + function(some number, steps - 1, False)
if do_rounding:
return round(result, 2)
else:
return result
答案 3 :(得分:0)
也许您想要这样的东西?这不等同于OP代码,但很有意义。它将some_calculation
递归steps
次,并舍入最终值。
def function(x, steps):
if steps == 1: return round(x, 2)
return function(some_calculation(x), steps - 1)