递归python首尾相同的子字符串_如何通过递归获得字符串的所有连续子字符串?...

本文探讨了在处理双重迭代问题时如何通过创建递归函数,如辅助函数处理内循环和主函数处理外循环,来简化复杂任务。通过一个实例和模板代码,展示了如何利用尾递归进行字符串操作,以及如何逐步构建解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使这变得复杂的是,你有一个双重迭代,所以有一种方法来解决这个问题,为每个循环生成一个递归函数,并将它们组合起来,这意味着一个处理内循环的辅助函数和一个处理外循环的主函数。在

为此,我们需要了解迭代函数的工作原理,一个简单的打印将有帮助def it(word):

set1 = set()

for begin in range(len(word)):

for end in range(begin,len(word)):

set1.add(word[begin:end+1])

print(word[begin:end+1])

print()

return set1

一个简单的测试揭示了一个有用的模式

^{pr2}$

这使得目标更加明确,辅助函数每次取一个字符串并删除最后一个字符或取一个更大的子字符串,而主函数将在每次递归调用中删除第一个字符。在

现在我不会给您一个工作代码,而是一个模板,它使用tail recursion,供您完成def recur_aux(word, result=None, end=None):

if result is None:

result = set()

if end is None:

end = # an adequate default value

if #an adequate stop condition, aka base case:

return result

else:

#do an adequate step

return recur_aux( word, result, #end + or - 1 )

def recur(word,result=None):

if result is None:

result = set()

if word: #this is equivalent to len(word)!=0

#do a adequate step calling recur_aux

return recur( # an adequate recursive call )

else:

return result

试一试,比如这样测试>>> it("abcdef") == recur("abcdef")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值