首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >最大递归depth_Octave

最大递归depth_Octave
EN

Stack Overflow用户
提问于 2014-09-17 13:56:24
回答 2查看 2.1K关注 0票数 0

“已达到的最大递归深度”错误来自以下简单代码:

代码语言:javascript
复制
function [ y ] = A( X )
    y = 0;
    if(length(X) >=1)
        for j=1:length(X)
            y = y + A(j);
        endfor
    endif
end

A的大小未知。X是一个向量。计算数字的和。

使用不同的单元测试来测试此功能。我是不是遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2014-09-17 14:08:24

看起来您正在使用j=1递归调用A,并且函数不满足结束条件(即长度(X) >= 1),因为长度永远不会改变。

如果您需要使用递归解决此问题,则需要在重复递归调用之前从X中删除该元素。

更新

基于文档herehere,似乎需要对递归执行以下操作(对不起,我坐的地方没有倍频程,所以可能是错误的,如果是这样的话请告知):

代码语言:javascript
复制
function [ y ] = A( X )
    y = 0;
    if(length(X) >=1)
        y = X(end);
        X(end) = [];
        y = y + A(X);
    endif
end
票数 0
EN

Stack Overflow用户

发布于 2017-06-10 07:07:53

您的原始函数是正确的。(编辑后的版本(带有循环)根本不起作用。)行X(end)=[];使每个调用的X缩短1,确保递归终止。

代码语言:javascript
复制
function [ y ] = A( X )
    y = 0;
    if(length(X) >=1)
        y = X(end);
        X(end) = [];
        y = y + A(X);
    endif
end

问题是Octave提供的递归深度非常有限(默认的max_recursion_depth() == 256)。因此,在默认设置下,A(1:400)会生成您观察到的错误消息。可以稍微增加它,例如max_recursion_depth(512)允许A(1:400)工作(如预期),但A(1:500)会导致Octave 4.2.1崩溃(至少在我的机器上),但这似乎是Octave中的一个错误,而不是对语言的误解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25883247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档