求 1+2+...+n ,要求不能使用乘除法、for、while、if、else等关键字及条件判断语句
示例
1:
输入: n = 3
输出: 6
示例
2:
输入: n = 9
输出: 45
限制:
1 <= n <= 10000)
- 在网上搜了半天,就是没搜到Python版本的, 经过小伙伴的讲解, 瞬间感觉通透了好多, 以下是这道题的两种方法.
- 其一
n = 9 # 输入的要计算的个数
a = sum(list(range(1, n+1)))# range(1, n+1): range出一列数 [1, 2, 3, ..., n]
# list(range(1, n+1)) : 将其转换为一个列表
# sum(list(range(1, n+1))) : 来来来, 最神奇的一步来了,
# sun() 函数竟然可以对一个列表求和, 是不是很神奇.....
# 直接求和打印就好了.
print(a)
def msum(n): # 定义一个函数, 运用递归 and 的特殊性求和
res = n and (n + msum(n - 1)) # and 的特殊性: a and b , and 从前往后判断, 直到两个都为真,则返回后一个数, 也就是 b .
return res # 若前一个数为假, 即 a 为假, 则直接返回前一个数, 后一个数就不判断了.
print(msum(9)) # 若前为真, 后为假, 即 a 真 b 假, 则判断到b 时, 将b 返回.
# 若 n = 9
# 9 and (9 + msum(8)) 根据and 特点
# ==> 9 + 8 + msum(7)
# ==> 9 + 8 + 7 + msum(6)
# .......
# 9+8+7+.....+0 直接返回, 即求和完成.