关于 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 不使用循环判断的主要内容,如果未能解决你的问题,请参考以下文章