如何用非常规方法求:1+2+...+n(Java版)

本文介绍了在不使用乘除法、条件判断语句等限制下,用Java解决求1到n的和的三种创新方法:1. 利用短路与的递归终止;2. 通过异常终止递归;3. 使用Math.pow和右移运算。这些解法旨在展示程序员的发散思维和对编程技术的理解。
摘要由CSDN通过智能技术生成

今天在《剑指offer》里看到了下面这样一个有趣的题,考察程序员的发散思维能力,书上的解法都是C++的,我在网上整理了一些用Java实现的代码以及思路,分享给大家。

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

点评:这个问题本身没有太多的实际意义,因为在软件开发中不可能有这么苛刻的限制。但不少面试官认为这是一道不错的能够考查应聘者发散思维能力的题目,而发散思维能够反映出应聘者知识面的宽度,以及对编程相关技术理解的深度。

分析:通常求1+2+···+n无外乎这么几种解法:

  1. 公式:n (n + 1) / 2
  2. 循环
  3. 递归

因为不能用乘除法所以第一种思路 pass,循环要使用 for,while 所以也pass掉,那么还剩下了递归这种思路。

解法一:利用短路与的特性实现递归终止

因为递归要想终止必须判断终止条件是否满足,而判断通常情况下需要使用 if else,而题目要求不能使用 if else,我们换一种思路可以使用 “&&” 短路与的特性:当 && 左边的条件为 false 的时候整个表达式就为false,就可以模拟实现 if else 的条件判断。
实现代码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值