编辑:我已经编辑并澄清了代码和问题
编辑:在理解递归之前,必须先理解递归
我可以在没有递归的情况下做到这一点,但是如果你理解递归,你应该能够用递归做到这一点。但我不能。所以我对递归的理解有问题。如何修复这段代码,也就是说,关于递归,我遗漏了什么
所以,我想做的是做一些交易。每次出现某种情况时,我都想更新一些统计数据并重新开始交易。我还记录了我重启交易的次数,这是变量“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
根据所提供的信息,我预计:
nr_restarts
应该是Start_trading()
的递归调用的总数,所以这样计算-它等于3,而不是2dfL
返回的将始终是一个常量列表[0..9]=>;从递归中删除它&;而是记录一些其他可能有用的数据start
和end
就足够了,因为这些是在OP中以某种方式影响流的唯一变量)因此,这里有一个简化的代码,可能满足要求:
这将产生:
相关问题 更多 >
编程相关推荐