其他分享
首页 > 其他分享> > 剑指 Offer 64. 求1+2+…+n

剑指 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