发布于 

剑指 Offer.64-求1+2+...+n

剑指 Offer.64-求1+2+…+n

题目链接

<剑指 Offer 64. 求1+2+…+n>

问题描述

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

个人想法(递归 + 逻辑运算)

题目条件限定不能使用所有关键字及乘数法,限制了直接遍历等差数列求和公式直接递归等方式,推测此题需要使用逻辑运算及递归解决

逻辑运算符的短路效应

高级程序设计语言中,存在三种逻辑运算符,分别是&&,||,!;其中&&与||存在短路效应,如下所示

1
2
if(A && B) // 当A为false时,B的判断不会执行,即发生短路,直接判断A&&B为false
if(A || B) // 当A为true时,B的判断不会执行,即发生短路,直接判断A||B为true

在本题中,需要通过n==1来控制递归结束,可通过短路效应进行实现

1
n > 1 && sumNums(n-1) //当n = 1是条件为false,发生短路效应,终止递归

官方解法

代码

1
2
3
4
5
6
7
8
9
class Solution {
int res = 0;
public int sumNums(int n) {
// 由于java的特性,需要给n > 1布尔判断语句赋值,并且在调用递归函数时也需要将其转变为boolean输出,故sumNums(n - 1)需要增加 > 0作为判断条件
boolean x = n > 1 && sumNums(n - 1) > 0;
res += n;
return res;
}
}

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @John Doe 创建,使用 Stellar 作为主题。