首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不带循环、递归或乘法的前N个数之和

不带循环、递归或乘法的前N个数之和
EN

Stack Overflow用户
提问于 2018-05-28 20:38:22
回答 7查看 1.8K关注 0票数 1

我的任务是用Java语言编写一个方法来计算第一个N正数的和。但是我不能使用任何循环(如fordo-while等),我也不能使用迭代。后者背后的原因是它占用了大量的堆空间,甚至在开始任何计算之前都是如此。我也不会用乘法。

它们有自己的不可变的Number类,我必须返回这个类,并且有01的实例。我不能创建任何新实例,但我可以添加两个实例并获得结果。

例如,我不能只返回n * (n + 1) / 2,因为乘法是被禁止的。我甚至尝试过用加对数做乘法,但是即使我有答案,我也不能返回它,因为我不能创建相应的Number实例。所以我想我必须使用Number附带的加法函数。

我应该通过创建一些我编写的不可变类的实例来解决这个问题,并将小计传递给新的实例。那很清楚了。我不清楚的是,在结束时,我仍然需要使用一些循环或某种递归,不是吗?还是有别的办法?

编辑:这是Numberhttps://pastebin.com/N8WNvmxK的代码(Numberf包中,我根本不能修改它)

更新:事实证明,我可以利用他们提供的类中的一个方法,因为它有一个while循环。这样我就可以进行迭代了。

EN

回答 7

Stack Overflow用户

发布于 2018-05-28 20:41:42

您应该返回(N*(N+1))/2,但这不是一个java编程问题,而是一个基本的数学问题。

票数 2
EN

Stack Overflow用户

发布于 2018-05-28 20:55:36

我猜你的主要问题实际上不是计算答案,而是有效地构造它(其他答案清楚地显示了你可以用于计算的公式)。

您可以使用二进制表示法构造数字,并为二进制表示法的每个1生成中间部分数。

假设从110的总和是55,它的二进制形式是110111 (32 + 16 + 4 + 2 + 1)。你可以通过将前一个的两个副本相加,然后累加成最终结果,来计算每个所需的2的幂。

票数 2
EN

Stack Overflow用户

发布于 2018-05-28 20:44:47

使用公式将前n个自然数求和为:((n**2)+n)/2

根据您的需要用Java或任何语言编写代码。

代码语言:javascript
复制
sum = ((n*n)+n)/2;

参考:https://trans4mind.com/personal_development/mathematics/series/sumNaturalNumbers.htm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50566681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档