我应该创建一个递归语句,如果第一次调用triangle(n(,它会返回
'******n *****n ****n ***n **n *'
上面称为三角形(6(,如果我打印(三角形(6((,它将返回下面。
******
*****
****
***
**
*
然后我必须创建另一个代码 recursive_triangle(x, n(,它返回一个字符串,其中包含底数和高度为 n 的直角三角形的最后 x 行。例如,如果我做了recursive_triangle(3, 6(,它会返回
' ***n **n *'
如果我打印它应该返回
***
**
*
到目前为止,我的代码是
#### DO NOT modify the triangle(n) function in any way!
def triangle(n):
return recursive_triangle(n, n)
###################
def recursive_triangle(k, n=0):
'''
Takes two integers k and n
>>> recursive_triangle(2,4)
' **\n *'
>>> print(recursive_triangle(2,4))
**
*
>>> triangle(4)
'****\n ***\n **\n *'
>>> print(triangle(4))
****
***
**
*
'''
# --- YOUR CODE STARTS HERE
if n == 1:
return "*"
else:
for i in range(1, n+1):
return ("*" *n) + "n" + (' ' * i) + triangle (n - 1)
对于打印(三角形(4(( 这就是我得到的
****
***
**
*
如何修改代码以获取上面的输出?
您的递归案例格式不正确:
else:
for i in range(1, n+1):
return ("*" *n) + "n" + (' ' * i) + triangle (n - 1)
首先,此代码在单次迭代后返回:return
结束函数实例,因此i
永远不会达到值 2。 您需要做一些简单的事情,然后重复使用更简单的情况来处理其余的事情。
接下来,triangle
的存在只是为了调用recursive_triangle
。 然后,recursive_triangle
需要调用自己,而不是循环回triangle
。
最后,请注意,recursive_triangle
完全忽略了参数k
。 此值对于确定在行中放置星号的位置至关重要。
recursive_triangle
的每个实例都应该产生三角形的一条线 - 你有正确的 - 然后将该线与三角形的其余部分连接起来,将连接的整体返回到调用它的实例。 您需要大致如下的内容:
else:
line = ... # build a line of k-n spaces and n asterisks
return line + recursive_triangle(k, n-1)
你能从那里拿走它吗? 除此之外,请记住插入一些有用的print
命令来跟踪您的执行流和生成的值。
首先,有更好的方法来实现这一点。 但是,如果您真的想这样做,以下代码可以解决间距问题。
#### DO NOT modify the triangle(n) function in any way!
def triangle(n):
return recursive_triangle(n, n)
###################
def recursive_triangle(k, n=0):
'''
Takes two integers k and n
>>> recursive_triangle(2,4)
' **\n *'
>>> print(recursive_triangle(2,4))
**
*
>>> triangle(4)
'****\n ***\n **\n *'
>>> print(triangle(4))
****
***
**
*
'''
# --- YOUR CODE STARTS HERE
if n == 1:
return "*"
else:
for i in range(1, n+1):
return ("*" *n) + "n" + (' ' * i) + triangle (n - 1).replace("n", "n ")
这给你
****
***
**
*
在 Python 3.6.5 中。
您可以使用r
对行进行计数,并使用辅助参数对空格进行计数,s
def triangle (r = 0, s = 0):
if r is 0:
return ""
else:
return (" " * s) + ("*" * r) + "n" + triangle (r - 1, s + 1)
print (triangle(5))
# *****
# ****
# ***
# **
# *
code.py:
#!/usr/bin/env python3
import sys
#### DO NOT modify the triangle(n) function in any way!
def triangle(n):
return recursive_triangle(n, n)
###################
def recursive_triangle(k, n=0):
'''
Takes two integers k and n
>>> recursive_triangle(2,4)
' **\n *'
>>> print(recursive_triangle(2,4))
**
*
>>> triangle(4)
'****\n ***\n **\n *'
>>> print(triangle(4))
****
***
**
*
'''
# --- YOUR CODE STARTS HERE
if k == 0:
return ""
else:
return "n".join(["".join([" " * (n - k), "*" * k]), recursive_triangle(k - 1, n)])
#return " " * (n - k) + "*" * k + "n" + recursive_triangle(k - 1, n)
def main():
print("triangle(6):n{:s}".format(triangle(6)))
print("recursive_triangle(3, 6):n{:s}".format(recursive_triangle(3, 6)))
print("repr recursive_triangle(2, 4): {:s}".format(repr(recursive_triangle(2, 4))))
print("repr triangle(4): {:s}".format(repr(triangle(4))))
if __name__ == "__main__":
print("Python {:s} on {:s}n".format(sys.version, sys.platform))
main()
注释:
- 为了使事情更简单,你可以看看
recursive_triangle(k, n)
的论点含义,例如:- k:递归步骤,以及">*"字符的数量。每次递归函数调用时递减
- n:1st(最长(三角形线长度(空格s +k的数量(。在递归中保持不变
- 当前行包含 n-k空格s,后跟k">*" s(总共n个字符(。行通过 [Python 3] 连接在一起:str.join(iterable((或"手动",在(下一个(注释行中(
- 函数调用自身,直到不再有"*">字符(k变为0(
输出:
(py35x64_test) e:WorkDevStackOverflowq052652407>"e:WorkDevVEnvspy35x64_testScriptspython.exe" code.py Python 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32 triangle(6): ****** ***** **** *** ** * recursive_triangle(3, 6): *** ** * repr recursive_triangle(2, 4): ' **n *n' repr triangle(4): '****n ***n **n *n'