求 1+2+...+n --有趣的短路原则

0x01.问题

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

 C++函数形式为  int sumNums(int n)

0x02.问题分析

 本来是一个很简单的问题,但是加上不准使用这些语句的限制,瞬间就变得有些艰难。

我们来思考,不能用循环,也不能用乘除,怎么完成累加得过程呢?这个很简单,一般都能想到,那就是使用递归,好像除了递归,也没有能进行累加得操作了。

有了递归的思路后,我们应该继续思考下一步,怎样返回?递归最重要的就是返回条件,而返回条件肯定需要判断,需要判断就需要用到if,else,switch等选择语句,现在不能使用这些语句,是不是这个题就无解了啊???

我们再来回想一下我们的思路,看看能不能从中找到一些可以突破的点,第一个,使用递归,毋庸置疑,不用递归咋整,再么既有其它的办法了,第二个,使用递归是不是得确定返回条件,确实是,不确定返回条件,递归就会无限的执行下去,最终会导致栈溢出,第三个,确定返回条件是不是需要能够选择的语句,返回条件在这里就是n大于0,肯定需要能够选择的语句才能控制递归返回,这个也是毋庸质疑的,第四个,能够选择的语句是不是就只有 if else switch case A?B:C呢?一般常用的就这些,但是我们不能确定就只有这些,我们可以从一些基本的语句去找,看能不能找到具有选择功能的语句。

0x03.短路原则

&&运算符具有如下的特性:对于A&&B

  1. 如果A为true,返回B的布尔值。
  2. 如果A为false,直接返回false,不去执行B。

我们称这一特性为 短路原则   

0x04.利用短路原则解决问题

了解短路原则之后,我们就能从短路原则中找到选择的功能了,在哪里呢?我们注意到,当A为假时,就不会去执行B了,如果我们把返回条件的相反值作为A,递归语句作为B,是不是就可以控制递归何时返回了呢 ?对的,就是这样,问题完美解决。

int sumNums(int n) {
    n&&(n+=sumNums(n-1));
    return n;
}

 

ATFWUS  --Writing  By 2020--03--16

  • 25
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ATFWUS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值