Categories
不学无术

组合 递归

荒废计算机太久了,以至于这么简单一个问题想了我大半天,其实就是数组求组合输出的方法,写下此日志提醒自己不能忘了老本!
题目的话大概可以这样表述

给出一个数据A={a_0,a_1,a_2…a_n}(其中n可变),打印出该数值元素的所有组合

需要使用递归的方法解决比较好,分而治之

给一大团数据{a0,a1, a2, …, an}:
1. 如果就剩一个元素的话,我就输出它,结束;
2.不输出a0,把除了我之外的余下一团交由递归处理;
3.要输出a0自己,然后余下一团交由递归处理;

其中case 3里面需要注意下一个递归要记住a0是要输出的,所以实践起来就是带了个前缀一样的东西记住。感觉这种排列组合的问题应该也可以用栈来解决,但归根结底还是分治。
用Python随意写了一个:

# coding:utf-8
def foo(inary, appendix=''):
    if len(inary) == 0:
        return
    #Case 0
    print appendix + str(inary[0])
    if len(inary) < 2:
        return
    #Case 1
    foo(inary[1:], appendix)
    #Case 2
    #print str(inary[0]),
    foo(inary[1:], appendix+str(inary[0]))

测试输出:

>>> foo([1, 2, 3, 4])
1
2
3
4
34
23
24
234
12
13
14
134
123
124
1234

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.