public class MethodDemo08
{
public static void main(String[] args)
{
int sum = 0;
sum = fun(100);
System.out.println("计算结果:" + sum);
}
public static int fun(int temp)
{
if(temp==1)
{
return 1;
}else
{
return temp + fun(temp-1);
}
}
}
这是老师讲的一个案例,我不太明白,递归是调用自己的方法,但是100+99+...+1的时候,也就是当temp=1的时候,函数就返回了1,根本就不用执行else语句,整个函数的结果应该是1,为什么是5050呢?
{
public static void main(String[] args)
{
int sum = 0;
sum = fun(100);
System.out.println("计算结果:" + sum);
}
public static int fun(int temp)
{
if(temp==1)
{
return 1;
}else
{
return temp + fun(temp-1);
}
}
}
这是老师讲的一个案例,我不太明白,递归是调用自己的方法,但是100+99+...+1的时候,也就是当temp=1的时候,函数就返回了1,根本就不用执行else语句,整个函数的结果应该是1,为什么是5050呢?
解决方案 »
- PanelBox can not be resolved to a type
- in.readLine读入的跟 定义的字符串字面不相同
- Unicode和GBK编码的问题
- 请大家帮忙,小弟弟在这里先谢了。
- 向数据库插入数据的问题
- 在println("")中输入字符,一行内没有完全输入,按回车在下一行继续输入。在第二行首部是否需要什么字符已表示输入的继续?
- 关于java 类中变量存取权限的问题
- 100分解决文件流问题
- 请诸位提供学习java的一些经典书籍~~多谢~~
- JBilder4中如何使用扩展类包,如C:\twz1jdbcForMysql-1.0.4-GA\twz1\noopt\*.class
- 归并排序的问题,数组越界
- java多线程队列问题
sum = 100+fun(99);
sum = 100+99+fun(98);
....
sum = 100+99+....+2+fun(1);
sum = 100+99+....+ 2 + 1;
sum = 5050;
+1 这个就是整个递归的过程。。刚100时就进的下面那个,并不少那个return 1的程序段…
值,慢慢算就出来了撒
100+99+fun(98)
......
if(temp==1){
return 1;
}fun(1)==1这是相当于已知最终的结果是返回的100+fun(99) 后面的返回可以想成计算过程打个断点调试下嘛 值搞小点 比如3
这是是判断语句啊,如果temp的值是1,当然不执行else。但是你第一次带过来的值是100=。=
return 100+fun(99)(
fun(99)return 99 + fun(98)(
fun(98) return 98+fun(97)
)
)整个100+99+98++2都在else语句的return 中的“fun(100)”中算出的,最后再+1
sum = 100 + fun(99);
fun(99) = 99 + fun(98)
......
fun(2) = 2 + fun(1);
fun(1) = 1;
看清楚这个过程没有.