剑指47-求1+2+3+...+n

题目描述

求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。


核心在于实现判断终止条件的逻辑:逻辑短路规则适用于return语句,结合递归来判断终止条件,一个全局变量记录递归逻辑所作的状态更新。

1
2
3
4
5
6
7
8
9
10
11
12
def sum_n(n):
if n <= 0:
return 0

def get_sum(n, mysum):
mysum[0] += n
return n-1 and get_sum(n-1,mysum)

mysum = [0]
get_sum(n,mysum)
return mysum[0]

或者在对象里用成员变量:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def Sum_Solution(self, n):
self.sum = 0
def getsum(n):
self.sum += n
n -= 1
return n > 0 and getsum(n)

if n == 0:
return 0
else:
getsum(n)
return self.sum