2016-05-17 8 views
2

私は再帰関数printPattern()を書き、星型でパターンを出力します。最初の引数は常に2の累乗であり、中央の行に表示される星の最大数です。 2番目の引数(デフォルトは0)は、星の各パターン行の前に置くスペースの数です。スターパターン再帰Python

出力の例は次のとおりです。

>>> printPattern(8,0) 
* 
** 
* 
**** 
    * 
    ** 
    * 
******** 
    * 
    ** 
    * 
    **** 
     * 
     ** 
     * 

私はこれが求めているものと同様である前の問題から、このコードを持っています。

def patt(n,s=0): 
    if n==1: 
     print('*') 
    else: 
     patt(n-1) 
     print('*'*n) 
     patt(n-1) 

それだけで私は、これは動作するはずだと思う2.

+3

あなたは何を持ちたいですか? –

+0

私は関数printPattern()が何を出力するために、上記のコードを使用したいと思います。関数patt()は同様の星型パターンを出力しますが、2の累乗であれば出力星のみです。 –

+0

'patt(n-1)'を呼び出す代わりに 'patt(n // 2) ' – L3viathan

答えて

1

代わりの1をsubstracting、2で割ます。

def patt(n,s=0): 
    if n==1: 
     print(' '*s,'*', sep='') 
    else: 
     patt(n//2, s) 
     print(' '*s, '*'*n, sep='') 
     patt(n//2, s + n//2) 

空白は、インデントなしで開始し、2番目の再帰の現在の数値の半分のインデントを追加します。このようにして、あなたが望む出力で示したパターンが現れます。

0

の力を出力するようにそれを変更するかどうかは本当にわからないイム:

def patt(n,s=0): 
    if(n>0): 
     patt(n//2,s) 
     print(" "*s + "*"*n) 
     patt(n//2,s+n//2)