一道算法面试题有如下要求:
求1+2+3+…+n和,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
一开始想到了一个解决方案,毕竟是在python中解决方案还是有的:
def getSum(n):
ls=range(1,n+1)
return sum(ls)
后来想想,毕竟是算法试题这么做完全没用到什么算法,就老老实实完成一个不用内置函数的算法吧。用到的是递归算法。同时这里运用到python中的一些隐藏的条件,在Python中明确说明了True和False是整数类型的子类型(参考py3)因此我可以利用这一特性。
def sub(m):
return m>0 and sub(m-1)+m
print(sub(3))
在这里虽然满足题目的要求,但是当n增加到998(python3.6中是998,在python2.7中是999)尴尬的问题来了,报错RuntimeError: maximum recursion depth exceeded,python限制了递归深度所以当数字在增大的时候就不能满足运算要求了。
解决办法还是有的,我们可以通过调节递归上限值来满足需求,但事实上这个值虽然设置高了但是实际使用的时候我的电脑上深度为20000左右的时候python就崩溃了有些电脑能再高一些没有能从根本上解决问题:
import sys sys.setrecursionlimit(1000000) #执行这个代码后,递归深度调整到1000000层
最后有在pyhton中不使用内置函数实现本算法也解决本文算法问题的大牛还请赐教!


