python - 双递归 - RuntimeError: 超出最大递归深度错误
问题描述
我试图构建一个函数如下:
a(0,m) = m+1
a(n+1,0) = a(n,1)
a(n+1,m+1) = a(n,a(n+1,m))
第一次尝试是:
def a(n,m):
if n == 0:
return m + 1
elif m == 1:
return a(n ,0)
else:
return a(n - 1, a(n, m - 1))
我得到了
RuntimeError:超出最大递归深度
所以第二次尝试就是这样,我工作了。
def a(n,m):
if n == 0:
return m + 1
elif m == 0:
return a(n-1 , 1)
else:
return a(n - 1, a(n, m - 1))
所以问题是我不完全理解处理两个函数的哪个区别为什么第一个函数得到最大值。递归深度超出错误,第二个不是?
解决方案
在以下情况下会出现问题:
- n != 0(例如:x)
- 米 = 0
怎么了?
首先,n != 0,所以第一个 if 语句被跳过。
但是,m=0,所以第一个 elif 语句被接受。返回什么?
- n 仍然不等于 0(它等于 x)
- m 仍然等于 0
因此,提出了完全相同的问题,过程重新开始,永无止境。
在您更新的代码中,您要求 n-1,因此 n 会慢慢减少直到它为 0,并且第一个 if 语句被接受,之后程序终止。
推荐阅读
- angular - 无法为 Angular 应用程序创建 docker 映像
- typescript - TypeScript:基于参数的函数返回类型,无需重载
- robotframework - 如何在 Robot Framework 中将单引号( ' )替换为双引号( " )?
- vb.net - 禁用密码 TextBox Caps-Lock is On 警告
- r - 在循环中轻敲两个变量
- python - 为什么烧瓶 sqlalchemy 不编写更改
- c# - 如何使用 PageObject 模型在 C# 中初始化一个完整的类?
- java - UTF-8 字符编码不适用于 Spring 应用程序的 AWS Elasticbeanstalk Tomcat8 服务器
- python - 条件合并:单个索引器越界“发生在零”的熊猫错误
- pandas - 在不删除分隔符的情况下拆分 URL 列表