Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二进制字符串的递归问题(Python)_Python_Recursion - Fatal编程技术网

二进制字符串的递归问题(Python)

二进制字符串的递归问题(Python),python,recursion,Python,Recursion,我遇到了python问题;我已经在这上面工作了一个小时了,我完全被卡住了。。我仍然不太适应递归,而且问题越来越难解决,因此非常感谢任何类型的帮助 问题很简单,我需要写一个函数,把n和w作为输入;其中n是位字符串的大小,w是字符串中的位数。输出应该是它的所有排列 例如: n=3,w=1:['001','010','100'] n=4,w=2:['0011','0101','0110','1001','1010','1100'] 这是我到目前为止所写的内容,但尽管我在python visualize

我遇到了python问题;我已经在这上面工作了一个小时了,我完全被卡住了。。我仍然不太适应递归,而且问题越来越难解决,因此非常感谢任何类型的帮助

问题很简单,我需要写一个函数,把n和w作为输入;其中n是位字符串的大小,w是字符串中的位数。输出应该是它的所有排列

例如:

n=3,w=1:['001','010','100']

n=4,w=2:['0011','0101','0110','1001','1010','1100']

这是我到目前为止所写的内容,但尽管我在python visualizer中对其进行了调整或运行,我还是无法理解:

def genBinStr2(n,w):
    if n <=0 or w <= 0 :
        return [""]
    X = genBinStr2(n-1,w)
    Y = genBinStr2(n-1,w-1)
    M = []
    for s in X:
        M.append("0"+s)
    for m in Y:
        M.append("1"+s)
    return M
print (genBinStr2(3,1))
再次感谢您的帮助!我真的很想解决这个问题


谢谢

如果您不介意不使用递归,这里有一个使用
itertools

from itertools import combinations

def ones(n, w):
    combos = [dict.fromkeys(x, "1") for x in combinations(range(n), w)]
    return ["".join([x.get(i, "0") for i in range(n)]) for x in combos]

ones(4, 2)
输出:

['1100', '1010', '1001', '0110', '0101', '0011']

如果您不介意不使用递归,这里有一个带有
itertools

from itertools import combinations

def ones(n, w):
    combos = [dict.fromkeys(x, "1") for x in combinations(range(n), w)]
    return ["".join([x.get(i, "0") for i in range(n)]) for x in combos]

ones(4, 2)
输出:

['1100', '1010', '1001', '0110', '0101', '0011']

你的开场白不允许出现w=0的情况

例如: print(genBinStr2(3,0))将返回[“”]而不是[“000”]

当1的数量小于w时,还存在返回结果的问题

下面是我使用递归解决问题的方法:

def genBinStr2(n,w):
    if n == 1:
        if w == 1:
            return["1"]
        if w == 0:
            return["0"]
    if n <= 0 or w < 0:
        return [""]
    X = genBinStr2(n-1,w)
    Y = genBinStr2(n-1,w-1)
    M = []
    if w < n:
        for s in X:
            M.append("0"+s)
    if w >=1:
        for m in Y:
            M.append("1"+m)
    return M

你的开场白不允许出现w=0的情况

例如: print(genBinStr2(3,0))将返回[“”]而不是[“000”]

当1的数量小于w时,还存在返回结果的问题

下面是我使用递归解决问题的方法:

def genBinStr2(n,w):
    if n == 1:
        if w == 1:
            return["1"]
        if w == 0:
            return["0"]
    if n <= 0 or w < 0:
        return [""]
    X = genBinStr2(n-1,w)
    Y = genBinStr2(n-1,w-1)
    M = []
    if w < n:
        for s in X:
            M.append("0"+s)
    if w >=1:
        for m in Y:
            M.append("1"+m)
    return M

我正在看一看,但我马上看到的一件事是Y中的m:m.append(“1”+s)应该是“1”+m”@user2379875比我快。@user2379875这确实是一个愚蠢的错误。。。xD但它并没有完全修复它:(非常感谢您看一看:3我正在看一看,但我马上看到的一件事是Y中的m:m.append(“1”+s)应该是“1”+m”?@user2379875击败我。@user2379875这确实是一个愚蠢的错误……xD但它并没有完全修复它:(非常感谢您的关注:3这是一个非常酷的方法!不幸的是,我必须使用递归来完成它:(我不太介意,但是,在过去的一个小时里思考这个问题帮助我越来越理解这个原理。这是一个非常酷的方法!不幸的是,我必须使用递归来完成它:(我不太介意,但是,在过去的一个小时里思考这个问题正帮助我越来越理解这个原则。你,先生,太棒了!谢谢!你,先生,太棒了!谢谢!