本人是java初学者,请大神们快快帮我忙(关于数组的引用传递)!!!

I_am_a_Beginner 2015-05-31 10:27:00
题目;编写程序求1!+2!+……+20!的和并显示,要求用方法完成
代码如下:
public class My05 {

public static void main(String[] args) {
System.out.println("最终结果:"+sum(20));
}

public static int sum(int s)
{
if(s==1)
{
return mum(1);
}
return mum(s)+sum(s-1);
}
public static int mum(int n)
{
if(n==1)
{
return 1;
}
return n*mum(n-1);
}
}


问题
1.代码的结果是对的,但是为什么当调用sum(13)时结果是负数的,而sum(15结果为正数的?

2.在sum()调用是能不能传到负数的?

3.对于数组的引用传递怎么去具体分析的?
...全文
417 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_27901455 2015-06-20
  • 打赏
  • 举报
回复
I_am_a_Beginner 2015-06-17
  • 打赏
  • 举报
回复
shuaiqi_P_D 2015-06-13
  • 打赏
  • 举报
回复
10的阶乘就已经很大了,,何况你这个
I_am_a_Beginner 2015-06-13
  • 打赏
  • 举报
回复
引用 7 楼 城北徐公之壮士的回复:
你写个嵌套循环不行吗?

public static void main(String[] args) {
		int sum = 0;
		for(int i =1;i<=20;i++){
			sum += jc(i);
		}
		System.out.println(sum);

	}
	
	public static int jc(int n){
		int value = 1;
		String t = "";
		for(int i=1;i<=n;i++){
			value *= i;
			t += i + "*";
		}
		System.out.println(t);
		return value;
	}

厉害,希望之后多的多来教我
I_am_a_Beginner 2015-06-12
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
你写个嵌套循环不行吗?

public static void main(String[] args) {
		int sum = 0;
		for(int i =1;i<=20;i++){
			sum += jc(i);
		}
		System.out.println(sum);

	}
	
	public static int jc(int n){
		int value = 1;
		String t = "";
		for(int i=1;i<=n;i++){
			value *= i;
			t += i + "*";
		}
		System.out.println(t);
		return value;
	}

yalishandazhu 2015-06-05
  • 打赏
  • 举报
回复
引用 7 楼 liliminxin 的回复:
你写个嵌套循环不行吗?

public static void main(String[] args) {
		int sum = 0;
		for(int i =1;i<=20;i++){
			sum += jc(i);
		}
		System.out.println(sum);

	}
	
	public static int jc(int n){
		int value = 1;
		String t = "";
		for(int i=1;i<=n;i++){
			value *= i;
			t += i + "*";
		}
		System.out.println(t);
		return value;
	}

还是这位小哥写的给力,循环好
I_am_a_Beginner 2015-06-04
  • 打赏
  • 举报
回复
引用
溢出了,换个方式来吧。 其实有更加简单的,参考:
我是要阶乘,不是累加啊!!!!!!
傻傻de点点 2015-06-01
  • 打赏
  • 举报
回复
引用 3 楼 I_am_a_Beginner 的回复:
1.为什么改了返回类型为long时,结果为什么不同,结果怎么会增大那么多的??? 2.。为什么不可以负数,是因为java默认当有阶乘就不能为负数吗???
1. Java里int的范围是 -2147483648 ~ 2147483647,13的阶乘是6227020800,不在这个范围中,你可以理解为,超过了int的范围,Java会犯2。而long的范围是-9223372036854775808~9223372036854775807,所以Java不会犯2。 2.这是个数学问题,负数没有阶乘,只有正整数才有阶乘。
I_am_a_Beginner 2015-06-01
  • 打赏
  • 举报
回复
1.为什么改了返回类型为long时,结果为什么不同,结果怎么会增大那么多的??? 2.。为什么不可以负数,是因为java默认当有阶乘就不能为负数吗???
rumlee 2015-06-01
  • 打赏
  • 举报
回复
溢出了呗,用bigdecimal就好了。 能用循环解决的问题最好别用递归,递归层级多了容易导致栈溢出,性能也没有循环好。
alan19931103 2015-06-01
  • 打赏
  • 举报
回复
越界了,超出了int的范围,用long 。

Java 可以,你这题不可以,你见过负阶乘?

换了个马甲而已,一直都是那货
JPF1024 2015-06-01
  • 打赏
  • 举报
回复
溢出了,换个方式来吧。 其实有更加简单的,参考:

/**
 *
 *
 * @author puruidong
 * @version 2015.06.01
 *
 */
public class Main{

    private static void sum (long number){
        System.out.println(((1+number)*number)/2);
    }

    public static void main(String[] args) {
        sum(20);
        sum(50);
        sum(100);
    }
}


62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧