黑马程序员技术交流社区

标题: 求1+2+3+4+...+n? [打印本页]

作者: fanxia_2007    时间: 2015-4-18 01:08
标题: 求1+2+3+4+...+n?
求1+2+3+...+n的值,要求不能使用乘除法、for、while、if、else、switch、case关键字以及条件判断语。
作者: 程梦真    时间: 2015-4-18 01:24
  1. public static int getSum(int num) {
  2.                 if (num <= 0) {
  3.                         System.out.println("输入大于0的数");
  4.                 }
  5.                 if (num != 1) {
  6.                         return getSum(num - 1) * (num);
  7.                 }else {
  8.                         return 1;
  9.                 }
  10.         }
复制代码

作者: fanxia_2007    时间: 2015-4-18 07:31
程梦真 发表于 2015-4-18 01:24

要求不能用if条件判断语句哦。
作者: lslkkk    时间: 2015-4-18 07:42
这么多要求:L
作者: adalvik    时间: 2015-4-18 08:40
将楼上的代码改下
  1.         public static int getSum(int num) {

  2.         return   num<=0?0:num!=1?getSum(num - 1) + (num):1;
  3.         
  4. }
复制代码




作者: xlunaer    时间: 2015-4-18 08:59
  1. package com.xlunaer.alan;

  2. /**
  3. * 思路 : 1: 把sum定义为静态成员变量。
  4. *        2: 写一个迭代方法,迭代出所求的和。
  5. *        3:在构造方法中调用迭代方法求出并打印和,打印结束后将sum清零。
  6. *
  7. * @author Eli
  8. *
  9. */
  10. public class Demo {

  11.         //定义静态变量sum
  12.         static int sum = 0;

  13.         //迭代函数   
  14.         // n :求和的项数
  15.         private boolean add(int n) {
  16.                 sum += n;
  17.                 //若n-1 为 0 ,则不再迭代,否则返回add(n-1),add(n-1)继续求和
  18.                 return ((n - 1 == 0) || add(n - 1));
  19.         }

  20.         Demo(int n) {
  21.                 //调用迭代方法
  22.                 add(n);
  23.                 //打印结果
  24.                 System.out.println(sum);
  25.                 //将sum置0
  26.                 sum = 0;
  27.         }

  28.         public static void main(String[] args) {

  29.                 //新建对象,求和 1 -- 10
  30.                 Demo d = new Demo(10);
  31.                 //新建对象,求和 1 -- 100
  32.                 Demo d1 = new Demo(100);
  33.         }

  34. }
复制代码

作者: 海带    时间: 2015-4-18 09:27
楼上的答案满足要求了
作者: mono    时间: 2015-4-18 09:37
学习一下、
作者: Wilsoncyf    时间: 2015-4-18 13:00
太牛了,学习学习
作者: 晓月清晖明    时间: 2015-4-18 14:51
真正地大神啊
作者: 曾宇    时间: 2015-4-18 15:16
adalvik 发表于 2015-4-18 08:40
将楼上的代码改下

如果num小于等于0,返回0.
否则
如果num不等于1返回getSun(num-1)+num
否则
返回1
但是我很疑惑啊。递归到最后会返回1啊。
作者: 曾宇    时间: 2015-4-18 15:39
曾宇 发表于 2015-4-18 15:16
如果num小于等于0,返回0.
否则
如果num不等于1返回getSun(num-1)+num
  1. public static int run(int n)
  2.         {
  3.                 //return n<=0?0:n!=1?run(n-1)+n:1;
  4.                 if(n<=0)
  5.                          return 0;
  6.                 else if(n!=1)
  7.                          return run(n-1)+n;
  8.                 else
  9.                          return 1;

  10.         }
复制代码


修改测试后发现,+n最后计算。原来如此,这个1代表n=1的时候+1
作者: adalvik    时间: 2015-4-18 15:43
曾宇 发表于 2015-4-18 15:16
如果num小于等于0,返回0.
否则
如果num不等于1返回getSun(num-1)+num

返回1 之后还会执行到 getSum 函数 和之前运算的结果相加之后才return
作者: 曾宇    时间: 2015-4-18 15:46
adalvik 发表于 2015-4-18 15:43
返回1 之后还会执行到 getSum 函数 和之前运算的结果相加之后才return

学习了。:lol
作者: bianzhiguo6    时间: 2015-4-18 16:32
乖乖,这题目谁出的?打死他,现实中有这么刁钻的项目题吗
作者: 平底斜    时间: 2015-4-20 00:31
战略性mark,看到相关知识再回来看
作者: yelebron    时间: 2015-4-20 00:43
应该递归可以解决吧!!!
作者: fanxia_2007    时间: 2015-4-20 22:44
adalvik 发表于 2015-4-18 08:40
将楼上的代码改下

出题人唯一没有限定的是三元运算符,估计就是让用三元运算符吧,代码很简化。
作者: itheima_llt    时间: 2015-4-20 23:08
不错,顶的人不多啊,快点继续
作者: thoris    时间: 2015-4-20 23:12
用三元运算符也是够厉害的   




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