Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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,我有一个练习问题,要求我使用递归和迭代生成x个交替的子字符串,即“#-”&“#-”。例如,字符串_迭代(3)生成“#-#-#-” 我已经成功地实现了迭代方法的解决方案, 但是我在开始使用递归方法时遇到了困难。我怎样才能继续 迭代法 def string_iteration(x): odd_block = '#-' even_block = '#--' current_block = '' if x == 0: return '' else:

我有一个练习问题,要求我使用递归和迭代生成x个交替的子字符串,即“#-”&“#-”。例如,字符串_迭代(3)生成“#-#-#-”

我已经成功地实现了迭代方法的解决方案, 但是我在开始使用递归方法时遇到了困难。我怎样才能继续

迭代法

def string_iteration(x):
    odd_block = '#-'
    even_block = '#--'
    current_block = ''
    if x == 0:
        return ''
    else:
        for i in range(1,x+1):
            if i % 2 != 0:
                current_block += odd_block
            elif i % 2 == 0:
                current_block += even_block
            i += 1
        return current_block

对于递归解决方案,您需要一个基本情况,并使用其他值再次调用该函数,以便最终获得所需的输出。在这里,我们可以像-
string\u recursive(x)=string\u recursive(x-1)+string\u recursive(x-2)+……+那样递归地解决这个问题字符串递归(1)


对于递归,您几乎总是只需要一个基本情况和其他一切。在这里,基本情况非常简单-当x<1时,可以返回一个空字符串:

if x < 1:
    return '' 
这归结为

string_iteration(1) + string_iteration(2) ... string_iteration(x)

另一个答案给出的结果与迭代方法不同。如果始终希望它以奇数块开始,则应将该块添加到递归调用的右侧,而不是左侧:

def string_recursion(x):
    odd_block = '#-'
    even_block = '#--'
    if x == 0:
        return ''
    if x % 2 != 0:
        return string_recursion(x - 1) + odd_block
    elif x % 2 == 0:
        return string_recursion(x - 1) + even_block

到目前为止你尝试了什么?我已经成功地实现了迭代方法的解决方案,但是我在开始使用递归方法时遇到了困难。有什么建议吗?了解有关递归的更多信息?啊,好的块[x%2]是有意义的,因为我最初在选择哪个块时遇到了困难。谢谢你的帮助!我没有否决这一点,但原因可能是因为递归函数依赖于全局变量是一个相当大的代码味道。而且,人们只对代码答案投反对票——这在这里是不鼓励的。另外,如果传入一个负值,就会得到一个无限递归。@MarkMeyer谢谢,你能告诉我使用全局变量的好方法吗?我正在学习编写可重用和可维护的代码。正如上面所示,这里不需要状态变量。但如果您这样做,通常最好将其作为参数传递给函数。然后递归调用也会传递它(如果需要,可以更改它)。
string_iteration(1) + string_iteration(2) ... string_iteration(x)
def string_recursion(x):
    odd_block = '#-'
    even_block = '#--'
    if x == 0:
        return ''
    if x % 2 != 0:
        return string_recursion(x - 1) + odd_block
    elif x % 2 == 0:
        return string_recursion(x - 1) + even_block