黑马程序员技术交流社区

标题: 不使用循环和条件语句如何求1+2+……+n的值? [打印本页]

作者: prospect    时间: 2012-7-22 12:37
标题: 不使用循环和条件语句如何求1+2+……+n的值?
不使用循环和条件语句如何求1+2+……+n的值?
作者: 陈雷    时间: 2012-7-22 14:54
System.out.println(((n+1)*n/2));
       
作者: 李东升    时间: 2012-7-22 15:04
循环的话是很好求,不用循环,只有考虑递归了,但是递归需要条件判断,这样子的话,真的只有System.out.println(((n+1)*n/2))了。。。。。。。。。

作者: 位雪    时间: 2012-7-22 15:14
递归应该可以
  1. int sum(int n){
  2.         if(n == 0)
  3.              return 1;
  4.         return n+sum(n-1);
  5. }
复制代码

作者: 郭凯敏    时间: 2012-7-22 15:29
使用递归可以,不建议递归会导致内存泄漏,建议循环
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);
        }
}

作者: 魏-玉-彪    时间: 2012-7-22 19:53
直接利用数学公式打印出来,只是只适合连续数 System.out.println(((n+1)*n/2))。
作者: 李菁    时间: 2012-7-22 21:18
如果不用循环,可以考虑递归和直接但因数学公式输出
递归:
public int sum(int a){
    if(a == 1){
        return 1;
    }
    return a+sum(a-1);
}
直接输出:
Systeem.out.println((n+1)*n/2)
作者: 黑马黄宏强    时间: 2012-7-22 23:05
不是说不许用条件语句吗? 递归是死循环必须使用条件语句来结束。所以正解只有:
System.out.println((n+1)*n/2);
作者: 胡文凡    时间: 2012-7-23 04:02
本帖最后由 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-23 07:26
郭凯敏 发表于 2012-7-22 15:29
使用递归可以,不建议递归会导致内存泄漏,建议循环
import java.util.Scanner;

小郭,人家说了不让用判断了,我去,不过加分了是最终目的,哦了
作者: 党巾水    时间: 2012-7-23 10:32
倒是直接想到了System.out.println(((n+1)*n/2));
但是不明白为什么递归会导致死循环
作者: 陈雷    时间: 2012-7-23 10:47
位丹丹 发表于 2012-7-22 15:14
递归应该可以


递归是可以 但是要求不使用条件语句
作者: 孙建飞    时间: 2012-7-23 10:56
求1+2+……+n的值有一个数学公式:首尾相加然后乘以尾数的一半
System.out.println((1+n)*n/2);
作者: 韩爽    时间: 2012-7-23 10:57
题目:不使用循环和条件语句如何求1+2+……+n的值?
条件:不使用循环,递归是死循环 需要使用条件语句结束。
解:只能直接输出了
System.out.println((n+1)*n/2);





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2