我想创建一个递归函数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)
我无法弄清楚如何实施这种模式。我也无法弄清楚如何让输出在需要的地方缩进每一行。
答案 0 :(得分: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)
* * * *
** ** **
* * *
**** ****
* *
** **
* *
********
*
**
*
****
*
**
*