Java学习.递归
递归
Java递归是指一个方法调用自身的过程。递归可以在解决问题时提供简洁的解决方案,特别是涉及到具有递归结构的问题。
在递归过程中,每个递归调用都会将问题规模缩小,直到满足终止条件为止。递归通常基于分治思想,它可以简化复杂的问题,并提供一种有效的问题求解方式。举个例子:
public class RecursionExample {
public static void main(String[] args) {
int n = 3;
int result = fibonacci(n);
System.out.println("The " + n + "th Fibonacci number is: " + result);
}
public static int fibonacci(int n) {
if (n <= 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
}
这段代码有人认为说是满足了n <= 1条件才结束了循环,确实是这样,但是说的容易让人迷惑,在下面的代码中:
if (n <= 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
实际上使用了多次fibonacci,注意看else后面是return fibonacci(n - 1) + fibonacci(n - 2);正是这里再次调用了fibonacci的方法。
1.首先
如果 n <= 1 为真,直接返回 n,没有任何的下一步直接结束。
2.其次
如果说不满足n <= 1的条件就会进入
else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
这里要注意是有方法的调用,千万不要忽略。
3.完整的运行过程
第一,因为n=3,所以进入else返回第一个和第二个方法
也就是fibonacci(2) + fibonacci(1);注解一下,fibonacci(2)的意思是n=2,然后调用了fibonacci的方法,也就是说我在后面的解释中的fibonacci(x)都是方法。
第二,else还没有运行完,fibonacci(2) + fibonacci(1)=(()fibonacci(1) + fibonacci(0))+1)=((1+0)+1)=2。
去运行原程序看看是否正确。
一个答案正确,再试一下n=4:
n=4,所以运行else进入fibonacci(3) + fibonacci(2)
然后((fibonacci(2) + fibonacci(1))+(fibonacci(1) + fibonacci(0)))
然后(((fibonacci(1) + fibonacci(0))+1))+(1+0))
然后=(((1 + 0)+1))+(1+0))=3
运行代码查看结果:
这里就可以证明我们的思路是正确的,所以千万不要被网上写的不清不楚的资料所误解,不要理解成为循环,满足if条件就结束循环。而是递归像一种覆合的代码,一次代码让有多次的判断组合成为递归的模式。(各有各的理解,说实在不行背?)
还有if在代码里起到什么作用?为什么叫做出口?换种说法,if是结束else里面代码的条件吧,如果说else是通道那么if就是站台,想一想黑黑的通道最后里面出现了一个带光的能跳出函数运行的门,所以他才叫做出口。但是最后的结果形式是else(结果)。