n = int(input("请输入你要打印的行数: ")) for i in range(0,n): spce_num = n - i for k in range(0,spce_num):#定义空格数 print(" ",end="") for j in range(-i,i+1): print(abs(j)+1,end="")'''从负数开始取,加个绝对值+1可以达到题目的效果 例:若i=2(表示第3行),则取-2到2为,加绝对值+1则为3,2,1,2 ,3''' print("") 在不改变输出结果的前提下,通过递归改写以上代码
时间: 2024-02-20 08:01:43 浏览: 58
可以通过递归的方式来实现打印数字三角形的功能。具体实现如下:
```python
def print_triangle(n, i=0):
if i == n:
return
spce_num = n - i
for k in range(0, spce_num):
print(" ", end="")
for j in range(-i, i + 1):
print(abs(j) + 1, end="")
print("")
print_triangle(n, i+1)
n = int(input("请输入你要打印的行数: "))
print_triangle(n)
```
在这个实现中,我们定义了一个名为`print_triangle`的函数,它接受两个参数:`n`表示打印的行数,`i`表示当前打印的行数。函数首先判断当前行数是否等于总行数`n`,如果是,则直接返回;否则,按照原来的逻辑进行打印,并且调用自身递归地处理下一行。
最后,在主程序中,读取用户输入的行数`n`,并调用`print_triangle`函数开始打印数字三角形。
相关问题
n = int(input("请输入你要打印的行数: ")) for i in range(0,n): spce_num = n - i for k in range(0,spce_num): print(" ",end="") for j in range(-i,i+1): print(abs(j)+1,end="") print("")通过递归优化上面的代码
我们可以通过递归来实现这个打印数字三角形的程序,具体实现方法如下:
```python
def print_triangle(n):
if n <= 0:
return
print_triangle(n - 1)
space_num = abs(n - 1)
for i in range(0, space_num):
print(" ", end="")
for j in range(-space_num, space_num + 1):
print(abs(j) + 1, end="")
print("")
n = int(input("请输入你要打印的行数: "))
print_triangle(n)
```
在这个递归函数中,我们首先判断递归结束的条件,即当 n <= 0 时,直接返回。然后我们再调用递归函数 print_triangle(n - 1),来打印前面 n - 1 行的数字三角形。接下来就是打印第 n 行数字三角形的代码,与原始代码类似,只不过这里的行数使用的是 n 而不是 i。
注意:这个递归函数的空间复杂度为 O(n),因为每次递归都会创建一个新的函数调用栈,最多会创建 n 层函数调用栈。如果 n 很大,可能会导致栈溢出。如果要避免这种情况,可以使用尾递归或迭代的方式来实现。
def pyramid(n,i=0): if n < 1 or n > 15: return if n == i: return spce = n - i for j in range(0, spce): print(" ",end="") for k in range(-i,i+1): print(abs(k)+1,end="") print("") pyramid(n,i+1) pyramid(int(input('输入一个数')))改进代码,使其输出的数字位数不再影响格式
可以将每个数字的输出宽度设为一个固定的值,比如说3。可以使用字符串的ljust()方法来实现,如下所示:
```python
def pyramid(n,i=0):
if n < 1 or n > 15:
return
if n == i:
return
spce = n - i
for j in range(0, spce):
print(" "*3, end="")
for k in range(-i, i+1):
num = abs(k) + 1
num_str = str(num).ljust(3)
print(num_str, end="")
print("")
pyramid(n, i+1)
pyramid(int(input('输入一个数')))
```
在上面的代码中,我们将每个数字的输出宽度设置为3,使用字符串的ljust()方法来保证每个数字的输出宽度都是3。这样就可以保证数字的位数不再影响输出格式了。
阅读全文