求高手解释下这个java程序是怎么运行的?其实就是递归调用是什么意思?

public class Testdigui {
public static void main(String args[]){
System.out.println("计算结果:"+sum(100));
}
public static int sum(int num){
if(num==1){
return 1;
}else{
return num+sum(num-1);
}
}
}

这个程序算的是从1到你给的参数的累加值吧
1.首先你调用sum()方法并放进去参数100
2.if语句判断参数num是100
3.进入else语句块,为该方法返回结果num+sum(num-1),即 100+sum(99) 注意,在这里又调用了一次该sum方法,因此它又会将99当参数放到该sum方法里面继续运行一次,又会跳到else语句,然后又执行一次sum(num-1),一直到参数递减变为1的时候,才会结束,
说简单点,在这个例子面,递归调用就是方法调用方法自己.
但是这样做是很危险的,如果你没有适当的结束控制条件的话,很可能就会成为一个死循环追问

sum()方法是什么意思?

追答

sum()方法就是你在这个java文件中定义的 public static int sum(int num){} 这个方法,我只是省略了其中的参数,一遍你更容易理解,

public 公共的,就是其他类也可以调用你这个方法
static 静态的,这个修饰符修饰的方法可以直接用类名来调用,比如该例中,可以使用Testdigui.sum()调用的到你定义的这个方法

int 方法的返回值类型,就是说这个方法在执行完之后会得到一个int类型的值,
(int num)括号里面的num为这个方法要执行的时候需要一个int类型的参数

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-05
sum(100)->100+sum(99)->99+sum(98)->.....->sum(1)
递归调用就是自己调用自己
逻辑写好了是递归 写不好就是死循环
这个就是逻辑严重更有问题
调用一下sum(0)立刻就死循环了
第2个回答  2013-08-05
public static void main(String args[]) {
System.out.println("计算结果:" + sum(100)); // 程序从这里开始运行 调用sum();
}

public static int sum(int num) {// 这个方法需要传进来一个整形的参数
if (num == 1) { // 如果这个参数为1
return 1; // 就返回 1
} else {// 如果不为1

return num + sum(num - 1); //这里是递归调用  就是自己调用自己   每调一次num这个数就会减1  直到减为1就不再调了
}
}

 

这样行吗?

追问

第二行不是输出操作吗?为什么成调用了?

追答

第二行是输出呀 是在输出里面调用的呀 sum(100) 这就是调用

本回答被提问者采纳
第3个回答  2013-08-05
递归调用是一种特殊的嵌套调用,是某个函数调用自己。。。。但在这个函数中必须有结束递归的条件,不然就死循环,个人感觉递归就是一种循环的形式
第4个回答  2013-08-05
递归:自己调用自己
唯一注意,递归要有出口,不然就是死循环。
此程序的出口就是else部分,仔细揣摩。
望采纳
相似回答