剑指 Offer 64. 求1+2+…+n
作者:互联网
思路
本来是可以用等差数列,一步到位。return n*(1+n)/2
但是题目规定了不能用乘除法。于是想到递归。
递归的思路如下:
if(n=1)
return n;
else // 隐形条件就是n>1
return n+sumNums(n-1);
但是题目规定了不能用if
,所以就用逻辑短路
n>1 && n += sumNums(n-1); // 只有当n>1时会进行递归
return n;
解答代码如下:
class Solution {
public:
int sumNums(int n) {
n>1 && (n += sumNums(n-1));
return n;
}
};
评论区还看到另外一种方法,声明一个(n*n+1)
大小的数组并计算内存
相当于变相的使用 n(1+n)/2;
但是我的会报错。而且声明数组大小时使用变量并不是一种推荐的用法,因为这个数组定义在栈空间,如果变量n很大,可能就会导致stack overflow。
标签:return,&&,递归,Offer,int,sumNums,64,数组 来源: https://blog.csdn.net/qq_42133142/article/details/120583776