Python递归练习

时间:2014-12-08 22:05:45

标签: python recursion binary

“编写一个函数bin_rep(n),它返回一个二进制表示为n。

的字符串

扩展bin_rep(n)以创建base_rep(n,k)以给出表示基本k中的非netavie整数n的字符串,其中2 <= k <= 10.在基数k中,允许的唯一数字是{0,...,k-1}。

对于不同整数的列表,L,将开关(L)定义为L中不按递增顺序排列的对数。例如,开关([6,1,4])返回2,因为(6,1)和(6,4)无序。“

以上是实验课中的额外学分练习。我根本无法理解如何编写这些代码。我确实有类注释中的bin_rep(n)函数,但这是关于它的。请帮忙。这个练习根本没有标记,但我想知道它是如何写的。感谢。

def bin_rep(n):

    if n == 0:
        return ['']
    else:
        short_strings = bin_rep(n - 1)

        strings = []
        for s in short_strings:
            strings.append('0' + s)
        for s in short_strings:
            strings.append('1' + s)

        return strings

1 个答案:

答案 0 :(得分:1)

我不会给你代码,而是解释如何解决这个问题,所以你可以自己编写。

首先,请注意,与您的说明相反,bin_rep 会给出数字n的二进制表示形式;相反,它给出了最多n个数字的所有二进制字符串的列表。

所以,假设你想要做同样的事情 - 也就是说,列出所有基数 - k字符串,最多n个数字 - 你必须确定&#34的位置;基础2-ness&#34;进来了。

看看这段代码:

    for s in short_strings:
        strings.append('0' + s)
    for s in short_strings:
        strings.append('1' + s)

这对数字0执行了一些操作,然后对数字1执行了操作。这些是基数2的两位数。因此,为了使这对基数3起作用,它将是:

    for s in short_strings:
        strings.append('0' + s)
    for s in short_strings:
        strings.append('1' + s)
    for s in short_strings:
        strings.append('2' + s)

但是对于任意基数k,您必须为0到(但不包括)k的每个数字执行此操作。所以,你要写一些循环遍历那个(半开)范围内的所有数字,然后,不要重复这个双线程,只需使用它一次,作为循环内的嵌套循环在数字上。

此外,当然,您不需要对字符串'0'进行硬编码,而是需要编写数字的字符串表示。 (您无法在字符串中添加数字;您必须将数字转换为其字符串表示形式,然后将 添加到字符串中。)

另请注意,您不能只调用base_rep(n - 1),因为base_rep有两个参数。第二个论点应该是什么?