使用Python递归打印'*'图案
我想创建一个递归函数 f(),这个函数需要两个非负整数作为参数,并输出一个星号的图案。第一个参数表示图案的缩进程度,第二个参数表示图案中最长一行的星号数量,并且这个数量总是2的幂。
举个例子:
>>>f(0, 0)
>>>f(0, 1)
*
>>>f(0, 2)
*
**
*
>>>f(0,4)
*
**
*
****
*
**
*
到目前为止,我已经有了:
def f(x,y):
s='*'
if y is 1:
print(s)
elif y>1:
print(s)
print(s*y)
print(s)
我还不知道怎么实现这个图案。还有,我也不知道怎么让输出的每一行都按照需要进行缩进。
1 个回答
3
这样怎么样:
def f(indent, num):
if(num > 0):
f(indent, num//2); # print previous pattern
print(" "*indent + "*"*num); # print middle row of *'s
f(indent + 1, num//2); # print previous pattern indented
输出结果:
f(0,0) f(0,1) f(0,2) f(0,4) f(0, 8)
* * * *
** ** **
* * *
**** ****
* *
** **
* *
********
*
**
*
****
*
**
*
对称变化
如果你想要更对称的效果,可以试试这个变化:
def f(indent, num):
if(num > 0):
f(indent, num//2);
print(" "*indent + "*"*num);
f(indent + num//2, num//2); # indent by num//2 instead of 1
输出结果:
f(0,0) f(0,1) f(0,2) f(0,4) f(0, 8)
* * * *
** ** **
* * *
**** ****
* *
** **
* *
********
*
**
*
****
*
**
*