JAVA语言递归

来源:百度知道 编辑:UC知道 时间:2024/05/31 05:08:36
public class Test {

/**
* @param args
*/
// 求Fibonacci数列:1,1,2,3,5,8,...第40个数的值
public static void main(String[] args) {
System.out.println(f(40));
}
public static int f(int n){
if(n==1 || n==2){
return 1;
}else {
return f(n-1)+f(n-2);
}
}
}
是怎样运行的。n等于多少
如何自己调用自己的?
f(n-1)+f(n-2);这是个方法吗,执行这个方法就会调用自己??
执行步骤是怎么样的?什么时候才会结束
public static void main(String[] args) {
System.out.println(f(5));
}
public static int f(int n){
if(n==1 || n==2){
return 1;
}else {
return f(n-1)+f(n-2);
}
}
}
5不等于1也不等于2执行else,然后就返回 f(5-1)+(5-2)吗 这返回后n是等于4还是3。。。
之后在4不等于1不等于2执行else 返回f(4-1)+(4-2)
3也不等1和2 f(3-1)+(3-2)
n=2了,结束递归?
那 f(4-1)+(4-2) 这不有一个4-2=2的了吗?运行到这会结束吗

恩 就是这里return f(n-1)+f(n-2);反复的调用了f(int n)方法 实现递归,你试想若是第5个数,调用了该方法返回f(4)+f(3)的同时;f(4)和f(3)又分别掉用f()方法 返回 f(3)+f(2)和f(2)和f(1) 一直反复递归,最后即 f(5)=f(4)+f(3)=(f(3)+f(2))+(f(2)+f(1)) 即 f(5)=((f(2)+f(1))+f(2))+(f(2)+f(1)) 希望你能看明白 取第40个数和这个原理是一样的 只不过递归次数更多

至于当5不等于1也不等于2执行else,然后就返回 f(5-1)+(5-2)吗 这返回后n是等于4还是3。。。这可以看成在继续调用f()方法 括号里面算出来是什么值 n就等于什么,如f(5-1) 这里n=4 如 f(5-2)这里调用f()方法时传入的参数就是n=3了 因此实现递归,只要你每次 return 过来的式子中n不满足if条件,程序酒会继续调用,比如你 return f(4-1)+(4-2)时候,后面n为2 因此不在继续递归,但是你前面的式子为f(3)还会继续递归 即 return f(4-1)+f(4-2) 即 return f(3)+f(2) 即 return f(2)+f(1)+1即 return 1+1+1;程序终止

你看我上面的这例子 调用到最后 比如如果求f(5)即我求的是第5个数的,根据上面的递归调用到最后 为f(5)=((f(2)+f(1))+f(2))+(f(2)+f(1)) 而这时 f(2)和 f(1)返回的值为1了 就是你那if里面写的 只返回1并没有在继续调用了 这时候就停止了,else里面的意思是返回值的同时又分别调用了自身,所以会继续的调用,知道传进去的参数满足if条件为止,好比我f(5)一直调用最后分到f(5)=((f(2)+f(1))+f(2))+(f(2)+f(1))为止

public static int f(int n)
{
if(n==1 || n==2)
{
return 1;
}
else
{
retu