剑指offer:求1+2+3+...+n

 

题目:

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

先给自己普及大佬们口中的短路求值是什么。
作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值(short-circuit evaluation)。
假如expr1和expr2都是表达式,并且expr1的值为0,在下面这个逻辑表达式的求值过程中:

  • expr1 && expr2
  • expr2将不会进行求值,因为整个逻辑表达式的值已经可以确定为0。
  • expr1 || expr2
  • expr2将不会进行求值,因为整个逻辑表达式的值已经确定为1。

 

 

思路

因此可以利用左边的表达式来作为递归结束的判断条件。因此递归的表达式就在右边了。而想到递归的解法,必然是sum=Sum(n)=Sum(n-1)+n
使用&&,表示两边都为真,才为真,左边为假,右边就没用了。因此在不断递归时,直到左边为假时,才不执行右边。因此在第一次进行右边的判断时,就进入递归的调用。

 

 

解法1:利用短路递归

# -*- coding:utf-8 -*-
class Solution:
    def Sum_Solution(self, n):
        # write code here
        return n and (n+self.Sum_Solution(n-1))

 

解法2:直接python内置的sum和range函数

sum(list(range(0,n))

你可能感兴趣的:(剑指offer)