免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2029 | 回复: 4
打印 上一主题 下一主题

python这段代码怎么理解,谢谢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-28 15:01 |只看该作者 |倒序浏览
def combination(seq, length):   
    if not length:
        return [[]]
    else:
        l = []
        for i in xrange(len(seq)):
            for result in combination(seq[i+1:], length-1):
                l+= [[seq[i]]+result]
        return l

为什么这样调用返回为空,按我的立即应该也要返回值才对
print combination("a",2)
这样调用可以返回值
print combination("a",1)

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
2 [报告]
发表于 2015-05-28 15:19 |只看该作者
回复 1# nmgzw
你的函数是做排列组合中的组合,当你提供的字符串的总长度为x时,是没有办法出现取出(x+1)个元素的组合的。
所以,你的数字需要小于等于你的字符串的长度的。

论坛徽章:
0
3 [报告]
发表于 2015-05-28 15:38 |只看该作者
回复 2# icymirror


    谢谢,就是没太理解递归的部分大于字符长度的时候怎么没执行。
我的理解是当调用combinations('a',2)的时候,会进入到combinations('',1),然后。。。
同样combinations('a',1)的时候,也会进入combinations('',0)然后。。。。

能详细说下吗,怎么都没理解递归这部分的调用。

论坛徽章:
4
白羊座
日期:2013-11-05 10:26:09冥斗士
日期:2015-11-17 14:19:55白银圣斗士
日期:2015-11-17 15:13:0815-16赛季CBA联赛之新疆
日期:2016-04-01 09:10:58
4 [报告]
发表于 2015-05-28 16:06 |只看该作者
回复 3# nmgzw
当长度为0时,not length将会使函数不再进行下去,这里是退出点。

论坛徽章:
0
5 [报告]
发表于 2015-05-29 07:55 |只看该作者
谢谢,理解了
主要是原来对于a,2这样的情况,当length〉0的时候,seq为空,所以下面的代码就不执行了;一直没理解,昨天晚上又仔细学了一遍,终于明白了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP