求 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 直接返回, 即求和完成.