我应该创建一个递归语句,如果首先调用triangle(n),它将返回
'******\n *****\n ****\n ***\n **\n *'
上面的这个称为三角形(6),如果我打印(三角形(6)),它会返回下面。
******
*****
****
***
**
*
然后,我必须创建另一个代码recursive_triangle(x,n),该代码返回一个字符串,该字符串包含底数为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)
对于print(triangle(4)),这就是我得到的
****
***
**
*
如何修改代码以获取上面的输出?
答案 0 :(得分:0)
您的递归案例格式不正确:
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
命令来跟踪您的执行流和生成的值。
答案 1 :(得分:-1)
首先,有更好的方法可以实现这一目标。 但是,如果您确实想采用这种方式,则以下代码可以解决间距问题。
my_db:my_dataset.my_table
为您提供
#### 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中。
答案 2 :(得分:-1)
您可以使用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))
# *****
# ****
# ***
# **
# *
答案 3 :(得分:-1)
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)
的参数含义,例如:
输出:
(py35x64_test) e:\Work\Dev\StackOverflow\q052652407>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.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'