剑指offer 求1+2+3+4+。。。。。+n

短路求值:作为“&&”和“||”操作数表达式,这些表达式在进行求值时,只要最终的结果已经确定真或假,求值过程便告终,这就是短路求值。因此可以利用左边的表达式来作为递归结束的判断条件。因此递归的表达式就在右边了。使用&&,表示两边都为真,才为真,左边为假,右边就没用了。因此在不断递归时,直到左边为假时,才不执行右边。因此在第一次进行右边的判断时,就进入递归的调用。


func Sum_Solution( n int) int {
	var f func(ret *int, n int) bool
	f = func(ret *int, n int) bool {
		*ret += n
		return n>0 && f(ret, n-1)
	}
	var sum int
	f(&sum,n)
	return sum
}

发表评论 / Comment

用心评论~