关于 0+...+n 不使用循环判断

Posted htsg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 0+...+n 不使用循环判断相关的知识,希望对你有一定的参考价值。

仅考虑不使用判断循环,符合题意的解决方案

1.使用递归

1 public int intSum(int n) {
2         int sum = n;
3         boolean flag = n > 0 && (sum += intSum(n - 1)) > 0;
4         return sum;
5     }

2.Java8

1 public long intSumWithStream(int n) {
2         return LongStream.range(0, n + 1).sum();
3     }

3.配合求和公式

1 public int sum(int n) {
2         int sum = 0;
3         boolean flag = n > 0 && (sum = ((1 + n) * n) / 2) > 0;
4 return sum; 5 }

第一种:弊端很多,Java中一般不采用递归,没有进行递归优化,n 不能过大;

第二种:多线程,n 较小时耗时较长,n 较大时耗时较短,n 可以达到亿级,n < Integer.MAX_VALUE(2147483647)时结果都正确;

第三种:耗时和资源最小,n 不能过大;

 4.综合第二种和第三种:

1 public long intSumWithStream(int n) {
2         long sum = 0;
3         boolean flag = n > 0 && n <= 46340 && (sum = ((1 + n) * n) / 2) > 0;
4         flag = n > 46340 && (sum = LongStream.range(46341, n + 1).sum() + 1073720970) > 0;
5         return sum;
6     }

 

以上是关于关于 0+...+n 不使用循环判断的主要内容,如果未能解决你的问题,请参考以下文章

不使用循环判断一个数字是不是2的n次方

如何判断片段在 N​​avigationDrawer 中何时不可见

C语言 关于判断回文数的程序

如何让bat脚本循环执行?

素数专题——素数筛法

C语言的问题!!