题目描述:
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例 1:
输入: n = 3
输出: 6
示例 2:
输入: n = 9
输出: 45
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/qiu-12n-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:
这道题很容易想到的解题思路是递归的解法,即每次函数每次返回当前值n与递归下一步的和(n+sumNums(n-1))。你可能会写出下面的代码:

class Solution {public:int sumNums(int n) {return n+sumNums(n-1);}
};

很明显上面的代码是没有递归终止条件的,也就是说这段代码会一直执行下去。因此我们需要添加一个终止条件,也就是当n==0时,递归结束。进而你可能会想到下面的代码:

class Solution {public:int sumNums(int n) {return n == 0 ? 0 : n + sumNums(n-1);}
};

再检查一遍题目描述,这道题是不允许使用条件判断语句的,因此上面的代码也不可行。为此,我们还需要再想一下其他的判断方法。我们知道C++中如果a&&b中a为0,那么程序将不再判断b是否为1,进而可以想到将函数的终止条件放到a中,将执行条件放到b中,从而得到下面的代码:

class Solution {public:int sumNums(int n) {n && (n += sumNums(n-1));//当n!=0时函数继续递归执行,当n==0时,函数返回0,结束递归。return n;}
};

剑指offer之求1+2+...+n相关推荐

  1. 剑指offer之求两个数之和(不能使用四则运算)

    1 题目 剑指offer之求两个数之和(不能使用四则运算) 2 代码实现 #include<stdio.h>int add(int num1, int num2) {int sum1;in ...

  2. LeetCode 剑指Offer 64.求1,2到n的和, 不使用循环/判断及乘除

    题目 剑指 Offer 64. 求1+2+-+n 求 1+2+-+n ,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 示例 1: ...

  3. 【LeetCode】剑指 Offer 64. 求1+2+…+n

    [LeetCode]剑指 Offer 64. 求1+2+-+n 文章目录 [LeetCode]剑指 Offer 64. 求1+2+-+n package offer;public class Solu ...

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

    题目描述 求1+2+3+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解题思路 短路计算调用递归. class Solu ...

  5. 《剑指offer》求1+2+3+...n(不用if、else、乘除等)

    题目:求1+2+3+-+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 解析:题目提示已经很明显了,需要大家用A?B:C法解题 ...

  6. 《剑指offer》求二叉树的最小深度(非递归法)

    题目:求二叉树的最小深度(实际上该题来自leetcode) 解析:递归法简单些,下面演示下非递归.无外乎层次遍历二叉树了,思想是用current记录当前层的节点数,next记录下一层的节点数,用队列保 ...

  7. 剑指offer之求二叉树中两个节点的最低共同父节点

    1 问题 求二叉树中俩个节点的最低共同父节点,比如二叉树如下 42 61 3 5 7 比如节点1和3两个节点的最低共同父节点是2,节点3和5两个节点的最低共同父节点是4,节点5和6两个节点的最低共同父 ...

  8. 剑指offer之求两个链表的第一个公共节点

    1 问题 输入两个链表,找出它们的第一个公共结点. 含有公共节点的两个链表的结构类似于下图中的链表: 1 -> 2 -> 3 -> 4 ->5 2 -> 4 ->5 ...

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

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

最新文章

  1. MAT之SVM/BP:SVR(better)和BP两种方法比较且实现建筑物钢筋混凝土抗压强度预测
  2. java泛型学习三:受限制的通配符以及泛型方法
  3. 刘志勇:微博短视频百万级高并发架构
  4. 分享21款漂亮的WordPress高级主题
  5. WIN7 64位系统安装JDK并配置环境变量
  6. Spring MVC @RequestMapping Annotation示例
  7. linux 好用的命令行软件,比较好用的linux命令
  8. css基础 -文本溢出 text-overflow:ellipsis;
  9. 二十六、K8s系统强化2-seccomp与sysdig
  10. C# IEnumerator与 IEnumerable(2) 托管使用
  11. 分治法--二分查找、乘方、斐波那契数
  12. cglib动态代理实现及其原理浅析
  13. 手机业务的趋势:移动互联
  14. 台式计算机启用时间查看,win7系统如何查看电脑的开关机时间想知道是否有他人使用...
  15. MATLAB双目标定步骤
  16. spark推测机制及参数设置
  17. ar ebs 销售订单关闭_本周大新闻|《哈利波特》AR游戏玩法公开,谷歌关闭VR影视部门...
  18. win10輸入法去掉语言栏?win10輸入法切换简体繁体?
  19. 微信小程序和微信H5有什么区别?
  20. 国考省考申论:2次阅读法:1读感知材料类型和段落关系,2读根据问题词,原因词,影响词,对策词,关联词把握得分要点

热门文章

  1. android eclipse services,Eclipse中调试Android Framework本地代码模块部分过程记录
  2. centos7限制cpu使用_CentOS7 CPU隔离配置
  3. nodejs readfilesync 路径_Linux 磁盘多路径聚合multipath
  4. c语言solaris中图形库,成功弄出simics下的CDE登录界面,与大家分享
  5. matlab项目实例教程,matlab简明实例教程.doc
  6. java高级mysql面试题_Java高级面试题
  7. 使用ffmpeg将BMP图片编码为x264视频文件,将H264视频保存为BMP图片,yuv视频文件保存为图片的代码
  8. ubuntu13.10无法登陆
  9. ud分区删除工具_硬盘分区GPT分区怎么转MBR呢?硬盘分区GPT分区转MBR教程
  10. 链表怎么输出最后一个元素无空格_剑指offer系列----从尾到头打印链表