- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我知道标准 CPython 对递归深度有限制,我认为小于 1000,因此下面的示例代码将失败并出现“超出最大递归深度”错误。
def rec_add(x):
if x == 0:
return x
else:
return x + add(x - 1)
print(rec_add(1000))
听说Stackless Python支持无限递归深度,但是如果我用Stackless Python运行上面的代码,还是会报“超出最大递归深度”的错误。我想也许我需要以某种方式修改代码以使其能够使用 Stackless Python 的无限递归深度功能?
知道如何在 Stackless Python 中进行无限递归吗?谢谢。
注意:我知道如何将标准 CPython 的递归深度限制增加到 1000 以上,我知道如何将上面的代码转换为简单的迭代,或者简单地使用高斯公式来计算总和,这些不是我的意思寻找,以上代码纯属举例。
编辑:就像我在上面的“注意”部分所说的那样(我猜没有人真正读过),我知道如何增加 CPython 的递归限制,并且我知道如何将示例代码转换为迭代或只是一个高斯n * (n + 1)/2 的求和公式,我只是在这里问,因为我听说 Stackless Python 的一大特点是它支持无限递归,我不知道如何为示例代码。
EDIT2:我不确定我是否理解了“Stackless Python 支持无限递归”的想法是错误的,但这里有一些资料表明(或暗示)Stackless Python 支持无限递归:
What are the drawbacks of Stackless Python?
https://bitbucket.org/stackless-dev/stackless/issues/96
https://stackless.readthedocs.io/en/3.6-slp/whatsnew/stackless.html
最佳答案
经过摸索,我根据十多年前的官方示例代码得到了以下代码
所以我把递归加法代码修改成这样
import stackless
def call_wrapper(f, args, kwargs, result_ch):
result_ch.send(f(*args, **kwargs))
def call(f, *args, **kwargs):
result_ch = stackless.channel()
stackless.tasklet(call_wrapper)(f, args, kwargs, result_ch)
return result_ch.receive()
def rec_add(n):
if n <= 1:
return 1
return n + call(rec_add, n-1)
print(rec_add(1000000))
它适用于像 1,000,000 这样的大数字,我猜这是一种间接递归,因为该函数调用另一个函数,该函数启动一个 tasklet,该 tasklet 调用该函数本身(或类似的东西)。
现在我想知道这是否确实是在 Stackless Python 中实现无限递归的假定方法,或者是否有更直接/直接的方法来实现它?谢谢。
关于python - 如何在 Stackless Python 中进行无限(或非常深)递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55321142/
根据这个答案 https://stackoverflow.com/questions/551950/what-stackless-programming-languages-are-available
我是编程新手,现在已经使用 Python 几个月了。我试图获得一个与 Stackless 一起工作的概念,但就是想不通如何(尽管我已经写了 other test scripts 与 Stackless
在Stackless Python in Eve , 在 Python 中有一些关于“蓝色”对象的讨论。有人知道这项技术的详细信息吗? 最佳答案 这是一个框架的代号CCP可能是为 EVE Online
我正在制作自己的类 Lisp 解释型语言,我想做尾调用优化。我想将我的解释器从 C 堆栈中解放出来,这样我就可以管理我自己的函数到函数的跳转以及我自己的堆栈魔术来实现 TCO。 (我真的不是指无堆栈本
是否可以在不使用节点堆栈或“已访问”标志的情况下对二叉树执行迭代 *预排序*遍历? 据我所知,此类方法通常要求树中的节点具有指向其父节点的指针。现在,可以肯定的是,我知道如何使用父指针 和 访问标志执
对于一些学术研究,我需要模拟在单个处理器上运行的多个线程。 我希望能够在我的代码中插入 *call_scheduler()* 调用,其中当前“线程”将暂停(记住它在哪一行代码中)并且一些调度函数将决定
所以我正在玩弄无堆栈 python,编写一个非常简单 的网络服务器来自学使用微线程/tasklet 进行编程。但现在我的问题是,当我在 apache bench 中运行类似 ab -n 100000
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在开发一种我自己设计的函数式编程语言,我偶然发现了一个超出我解决能力的问题。我想知道是否有人对如何解决它有任何建议,或者为什么它是不可能的。 下面的代码概述了一个不是理想但妥协的解决方案。 这个问
给定一个大型(4.5 GB 代码库)python 测试框架,其执行涉及数十个文件,其中许多文件不能直接 pickle,是否可以将程序的初始执行包装在一行函数中,创建一个围绕该函数的 Stackless
在对 Clang 中的协程 TS 的当前实现进行了一些尝试后,我偶然发现了 asio 无堆栈协程实现。它们被描述为 Portable Stackless Coroutines in One* Head
您在使用 Stackless Python 和 PyQt 方面有哪些经验? 如果人们解决我会很高兴的问题: PyQt for Stackless 编译:PyQt 是否需要专门为 Stackless 编
有很多与 Stackless Python 相关的问题。但是没有人回答我的问题,我想(如果错了请纠正我 - 请!)。一直有一些关于它的嗡嗡声,所以我很想知道。我会用 Stackless 做什么?它比
我从 Stackless Python 开始,所以它对我来说是一个全新的奇妙世界。我通常使用常规线程,它们通常具有线程本地存储 (TLS),这当您不需要与其他线程共享内存时,这是一个非常有用的功能。
以下代码改编自一篇论文(R. O. Bjarnason,Stackless Scala With Free Monads)。 论文的标题指出了所提出的数据结构的总体目的——即在恒定堆栈空间中提供递归处
有没有类似Stackless Python的东西,即在 C# 中支持延续、微线程和轻量级进程的框架?我知道 C# 5 将部分支持其中的一些功能。但是现在有什么可以用的吗? 最佳答案 Axum 类似,但
我知道标准 CPython 对递归深度有限制,我认为小于 1000,因此下面的示例代码将失败并出现“超出最大递归深度”错误。 def rec_add(x): if x == 0:
包含无堆栈的 PyPy 1.7 的默认构建不提供在没有递归深度限制的情况下运行的能力(以直接方式)。 为什么? Previus 构建的 PyPy 具有无堆栈支持函数调用和尾递归的延续风格。 我不是在问
我将 Roberto Ierusalimschy 的 Programming in Lua 中的示例翻译为使用 boost::asio 和 stackful coroutines 通过 HTTP 使用
我有一个典型的生产者、消费者模式。如果生产者通过 channel 发送对象,则生产者将被阻塞,直到消费者接受该对象。消费者接受对象后,生产者以某种方式改变对象。消费者是否看到对象被改变了?或者在通过
我是一名优秀的程序员,十分优秀!