Python递归尚未完全理解

2024-09-28 05:19:09 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:我已经编辑并澄清了代码和问题

编辑:在理解递归之前,必须先理解递归

我可以在没有递归的情况下做到这一点,但是如果你理解递归,你应该能够用递归做到这一点。但我不能。所以我对递归的理解有问题。如何修复这段代码,也就是说,关于递归,我遗漏了什么

所以,我想做的是做一些交易。每次出现某种情况时,我都想更新一些统计数据并重新开始交易。我还记录了我重启交易的次数,这是变量“nr_restarts”的任务

因此,当我完成时,我用数字[0,…,9]填充变量“dfL”,并重新开始交易两次,因此nr_重新开始=2。这是我想带给用户的输出。但是,只有在执行行“sys.exit()”时,我才能获得此输出。在这种情况下,程序会突然终止,因此我无法将“dfL”列表或nr_重新启动给用户

如果我改为注释掉“sys.exit()”行,以便递归继续,直到程序执行完成,那么我可以将dfL列表和NRU重新启动带给用户。但在这种情况下,递归回滚,因此nr_从0、1、2重新启动,然后再次返回。因此nr重新启动到0,1,2,1,0。因此,nr_重新启动将作为0报告给用户,这是不正确的。而且dfL列表也变得很奇怪,因为递归继续添加[0,…,9]以外的值

正如我所说的,这不需要递归就可以完成。但是如果你理解递归,你应该能够用递归来理解它。我不能。你能吗

def Start_trading (dfL, start, end, nr_restarts):
    for idx in range (start, end):
        dfL.append (idx)
        if idx == 3: # some condition occurs, so restart trading
            dfL, nr_restarts = Start_trading (dfL, idx+1, end, nr_restarts+1)
        if idx == 7: # another condition occurs, so restart trading
            dfL, nr_restarts = Start_trading (dfL, idx+1, end, nr_restarts+1)
    print (dfL, nr_restarts)
    sys.exit()
    return dfL, nr_restarts

def Start ():
    start = 0
    end = 10
    nr_restarts = 0
    dfL = []
    dfL, nr_restarts = Start_trading (dfL, start, end, nr_restarts)
    return dfL, nr_restarts

Tags: 用户编辑列表sysexit情况交易start
1条回答
网友
1楼 · 发布于 2024-09-28 05:19:09

根据所提供的信息,我预计:

  • nr_restarts应该是Start_trading()递归调用的总数,所以这样计算-它等于3,而不是2
  • 如果程序没有抛出错误,dfL返回的将始终是一个常量列表[0..9]=>;从递归中删除它&;而是记录一些其他可能有用的数据
  • 调用的“业务”逻辑已经是正确的(即,只向它们传递startend就足够了,因为这些是在OP中以某种方式影响流的唯一变量)

因此,这里有一个简化的代码,可能满足要求:

def Start_trading(start, end):
    print('Start_trading', start, end)
    nr_restarts = 0
    for idx in range (start, end):
        if idx in (3, 7): # some condition occurs, so restart trading
            nr_restarts += 1 + Start_trading(idx + 1, end)
    return nr_restarts

start = 0
end = 10
nr_restarts = Start_trading(start, end)
print(list(range(start, end)), nr_restarts)

这将产生:

Start_trading 0 10
Start_trading 4 10
Start_trading 8 10
Start_trading 8 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 3

相关问题 更多 >

    热门问题