Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.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,我需要从递归解决方案中打印特定的星形图案。输入看起来很像这样: printPattern(2,8) 其结果是: * ** * **** * ** * ******** * ** * **** * ** * 是的,开头已经有2个空格。对于printPattern(0,4): 我已经从下面的内容开始了,但是我知道我在错误的方向上“重复”任何关于如何继

我需要从递归解决方案中打印特定的星形图案。输入看起来很像这样:

printPattern(2,8)
其结果是:

  *
  **
   *
  ****
    *
    **
     *
  ********
      *
      **
       *
      ****
        *
        **
         *
是的,开头已经有2个空格。对于printPattern(0,4):

我已经从下面的内容开始了,但是我知道我在错误的方向上“重复”任何关于如何继续的指示,或者我应该放弃它吗

现在我所做的就是找出偶数行和奇数行,我计划从0开始重复打印星号,但我得到一个UnboundLocalError:

repeat = 0
def printPattern(n,k):
    'prints a pattern of stars'
    if n == k:
        print("Done")
    elif n%2 == 0:
        print('even')
        repeat +=1
        printPattern(n+1,k)
    else:
        print (end=' ')*repeat
        print ('*')
        repeat+=1
        printPattern(n+1,k) 

大多数讨论集中在
repeat
变量上,该变量实际上并不需要,无论是作为全局变量还是作为参数。您的终止案例
n==k
看起来很奇怪,因为终止取决于
k
,但
k
不取决于
n
。我认为
k<1
真的是这个递归停止的时候。最后,您的偶数案例不会打印任何内容

我把这个问题分为三个步骤:递归地在中心的左边打印一个较小的图案;打印中心;递归打印中心右侧较小的图案偏移:

def printPattern(n, k):
    ''' print a pattern of stars '''

    if k < 1:  # base case
        return

    printPattern(n, k // 2)
    print(' ' * n, '*' * k, sep='')
    printPattern(n + k - k // 2, k // 2)

print(2, 8)
printPattern(2, 8)
print(0, 4)
printPattern(0, 4)
print(5, 9)
printPattern(5, 9)

由于没有提供示例,而且我无法从您的代码中对其进行反向工程,因此我对奇数输入没有做任何太有趣的事情。

您可以发布您迄今为止尝试过的内容,或许我们可以帮助您解决这些问题吗?问题包括“我对您说了一大堆话,现在您可以完成所有事情了”没有多大用处…将
repeat
作为参数传递给函数(否则需要在函数顶部设置
global repeat
,以允许
repeat+=1
,因为python中的名称绑定和作用域是如何工作的不确定这有多含糊,我给出了迄今为止我所知道的,不确定还有什么要做。
print(end='')*repeat
是一个类型错误(
print
返回无)。请尝试:
print(''*repeat,end='')
def printPattern(n, k):
    ''' print a pattern of stars '''

    if k < 1:  # base case
        return

    printPattern(n, k // 2)
    print(' ' * n, '*' * k, sep='')
    printPattern(n + k - k // 2, k // 2)

print(2, 8)
printPattern(2, 8)
print(0, 4)
printPattern(0, 4)
print(5, 9)
printPattern(5, 9)
> python3 test.py
2 8
  *
  **
   *
  ****
    *
    **
     *
  ********
      *
      **
       *
      ****
        *
        **
         *
0 4
*
**
 *
****
  *
  **
   *
5 9
     *
     **
      *
     ****
       *
       **
        *
     *********
          *
          **
           *
          ****
            *
            **
             *
>