mic*_*pri 2 python function python-2.7
我构建了一个简单的Python程序来查找输入是否为2的幂.我有两个功能,power_of_two和play_again.之后power_of_two运行,play_again然后运行和重播power_of_two
这是我的代码:
num = int(raw_input('Input a number (type 0 to quit): '))
def power_of_two(x):
y=1
z=[]
while y < x:
y=y*2
z.append(y)
if x in z or x == 1:
print 'true'
elif x == 0:
quit()
else:
print 'false'
play_again()
def play_again():
num = int(raw_input('Input a number: '))
power_of_two(num)
power_of_two(num)
Run Code Online (Sandbox Code Playgroud)
这样的代码在Python程序员中是否可以接受,或者是否有更好的方法来复制我在这里做的事情?
DNA*_*DNA 11
这种方法的一个问题是你最终会耗尽堆栈,因为我们有一对相互递归的函数.每次调用都会占用堆栈中的内存,而这些内存永远无法恢复.
这对于交互式程序来说并不明显,因为创建足够的递归调用需要很长时间,但如果我们加快速度:
def power_of_two(x):
print(str(x))
play_again(x)
def play_again(x):
power_of_two(x+1)
power_of_two(1)
Run Code Online (Sandbox Code Playgroud)
我们得到:
RuntimeError: maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)
有些语言可以进行尾调用优化,所以这种技术运行正常 - 但在Python中最好创建一个"再次播放"的循环,除非你可以确定只有一个小的调用深度.
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |