我试图在使用递归生成一个人形塔之后,在基础层找到最大人数。在人形塔中,每层都有奇数人,顶层只有1人。任意两个相邻层次的差别是2人,我的意思是人数从低层减少到更高层2。假设我们有4个人,那么3人在底层,1人在顶层。如果我们有6人,3人在底部,1人在上面,其余的人被丢弃。
我尝试了下面的代码,并希望改进代码。
x=1
def human_pyramid(no_of_people):
global x
if(no_of_people<x):
return x-2
else:
no_of_people-=x
x+=2
return human_pyramid(no_of_people)
print(human_pyramid(20))如果输入是20,输出应该是7。如果输入是10,输出应该是5。如果输入是1,则输出应该是1。
发布于 2019-01-14 19:45:37
考虑下面的代码
def human_pyramid(no_of_people, level=0):
people_on_row = 2 * level + 1
if no_of_people < people_on_row:
return people_on_row - 2
return human_pyramid(no_of_people - people_on_row, level + 1)这里,我避免使用全局变量,而是将行号作为附加参数传递,该参数的默认值为零。
输出:
>>> human_pyramid(20)
7
>>> human_pyramid(10)
5
>>> human_pyramid(1)
1发布于 2019-01-14 19:52:33
所需的计算可以用一个数学公式来表示:
import math
print(int(math.sqrt(no_of_people))*2-1)发布于 2019-01-14 20:01:38
https://stackoverflow.com/questions/54187998
复制相似问题