AWS Lambda有递归调用上限,当函数的递归深度超过1000层时,函数会自动停止,同时AWS Lambda会报告“递归调用失败”。因此,在编写递归函数时应该注意函数的递归深度,避免超过AWS Lambda的限制。
以下是一个模拟递归调用失败的示例代码:
def factorial(num):
if num == 0:
return 1
return num * factorial(num-1)
def lambda_handler(event, context):
result = factorial(1000)
return result
在上述代码中,当调用factorial(1000)
时,函数将会递归1000层,导致AWS Lambda报告递归调用失败。解决此问题的方法是使用迭代而不是递归计算阶乘。以下是使用迭代的示例代码:
def factorial(num):
result = 1
for i in range(1, num+1):
result *= i
return result
def lambda_handler(event, context):
result = factorial(1000)
return result
上述代码使用了一个循环来计算阶乘,因此没有递归调用,避免了AWS Lambda的递归调用上限。