A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

不使用循环和条件语句如何求1+2+……+n的值?

13 个回复

倒序浏览
System.out.println(((n+1)*n/2));
       

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
循环的话是很好求,不用循环,只有考虑递归了,但是递归需要条件判断,这样子的话,真的只有System.out.println(((n+1)*n/2))了。。。。。。。。。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
递归应该可以
  1. int sum(int n){
  2.         if(n == 0)
  3.              return 1;
  4.         return n+sum(n-1);
  5. }
复制代码
回复 使用道具 举报
使用递归可以,不建议递归会导致内存泄漏,建议循环
import java.util.Scanner;

public class Dg {
        public static void main(String[] args) {
                System.out.print("请输入你要累加到的数字n:");
                System.out.println(method(new Scanner(System.in).nextInt()));
        }

        public static int method(int n) {
                if (n == 1) {
                        return 1;
                }
                return n + method(n - 1);
        }
}
回复 使用道具 举报
直接利用数学公式打印出来,只是只适合连续数 System.out.println(((n+1)*n/2))。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
李菁 中级黑马 2012-7-22 21:18:34
7#
如果不用循环,可以考虑递归和直接但因数学公式输出
递归:
public int sum(int a){
    if(a == 1){
        return 1;
    }
    return a+sum(a-1);
}
直接输出:
Systeem.out.println((n+1)*n/2)
回复 使用道具 举报
不是说不许用条件语句吗? 递归是死循环必须使用条件语句来结束。所以正解只有:
System.out.println((n+1)*n/2);

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 huhuang03 于 2012-7-23 04:04 编辑

可以想想用一种投机的方法感觉型的避开循环和判断。实际有没有避开不知道
比如实现一个单例设计模式,并在对象构造的时候再创建对象并改变成员变量的值,这样就类似于循环了,在网上找到个怎样设计成员变量的
这样做:
在构造器里面做一个自加
class A{
  public static sum = 0;
  public static order = 0;
  public A{
  sum += ++order ;
}
}
对这个对象new 100次,然后读出sum就可以了。
然后再写个异常处理机制,当加到一百的时候触发异常,找到个出口
一个思路。。
回复 使用道具 举报
郭凯敏 发表于 2012-7-22 15:29
使用递归可以,不建议递归会导致内存泄漏,建议循环
import java.util.Scanner;

小郭,人家说了不让用判断了,我去,不过加分了是最终目的,哦了

评分

参与人数 1黑马币 +2 收起 理由
郭凯敏 + 2 忽略那个需求了,悲催的1分个收回去了,哈.

查看全部评分

回复 使用道具 举报
倒是直接想到了System.out.println(((n+1)*n/2));
但是不明白为什么递归会导致死循环
回复 使用道具 举报
位丹丹 发表于 2012-7-22 15:14
递归应该可以


递归是可以 但是要求不使用条件语句
回复 使用道具 举报
求1+2+……+n的值有一个数学公式:首尾相加然后乘以尾数的一半
System.out.println((1+n)*n/2);
回复 使用道具 举报
题目:不使用循环和条件语句如何求1+2+……+n的值?
条件:不使用循环,递归是死循环 需要使用条件语句结束。
解:只能直接输出了
System.out.println((n+1)*n/2);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马