题解 | #求1+2+3+...+n#

求1+2+3+...+n

https://www.nowcoder.com/practice/7a0da8fc483247ff8800059e12d7caf1

求1+2+3+...+n:最直观的想法是,循环或者递归。但是,题目中明确说了,不能使用关键字乘除法、for、while、if、else、switch、case等及条件判断语句(A?B:C),所以我们只能考虑其他方法了。在考虑其他方法时,我们先从原来的解法出发考虑,然后再看看原来的解法中我们可以使用什么方法来替换那些被禁用的方法。下面以原始的递归解法出发。

int Sum_Solution(int n) 
{
    if(n==1)
      return 1;
    return n+Sum_Solution(n-1);
}

idea:我们可以看到,上述递归解法中,只有一个被禁关键字if,那么可以有什么方法来替换该被禁关键字if呢?有!一般这种情况可以考虑逻辑运算或者位运算,此处明显是逻辑运算,其中,逻辑与与逻辑或均是短路运算。我们观察到,递归的边界条件是n==1,也就是说n再小到0就不可以了,那么我们可以使用逻辑与来解决这个问题,即返回n+Sum_Solution(n-1)时其前提条件是n不等于0。

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

#求1+2+3+...+n#
剑指offer 文章被收录于专栏

剑指offer专栏主要分享剑指offer题解。

全部评论

相关推荐

06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务