开发者社区> 问答> 正文

如何存储中间递归结果

我想获得与函数结果相同的结果(使用下面的代码中的打印功能)。如果在循环中使用return语句,则循环会中断,并且我永远也不会到达索引>0。如何将中间结果存储在(局部)变量中并最终作为函数结果返回?

l = list("ABCD")

def remel(l, pos):
    res = l[:]
    del res[pos]
    return(res)

def f(l):
    if len(l) == 1:
        res = l
        return(res)
    else:
        for i in range(len(l)):
            res = [l[i]] + f(remel(l, i))
            print(res) # store this and pass on how?
        return(res)

f(l)

问题来源:stackoverflow

展开
收起
is大龙 2020-03-25 09:25:25 3635 0
1 条回答
写回答
取消 提交回答
  • 您可以使用Tail递归访问中间递归结果。从在讨论给出的例子,假设您正在计算总和第一个``ň数字:

    function tailrecsum(x, running_total = 0) {
        if (x === 0) {
            return running_total;
        } else {
            return tailrecsum(x - 1, running_total + x);
        }
    }
    

    此处,将running_total传递给每个调用,因此您可以通过访问此变量来访问中间递归调用:

    tailrecsum(5, 0)
    tailrecsum(4, 5)
    tailrecsum(3, 9)
    tailrecsum(2, 12)
    tailrecsum(1, 14)
    tailrecsum(0, 15)
    # Returns 15
    

    回答来源:stackoverflow

    2020-03-25 09:25:32
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载