递归
前言
递归是Java中常用的方法,有许多问题用常用的方法难以实现,但是使用递归方法就会轻而易举的解决。
一、前言
遇到一些问题并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解。
二、递归
一个方法在执行过调用了自身,就称为递归。
递归的特征:自己中包含自己。
递归相当于数学上的”数学归纳法”,有一个其实条件,然后有一个递推公式。
例: 求N!
N!=N*(N-1)*(N-2) * …… * 1
当N=1时这个起始条件相当于结束条件
求N!,直接不是很好做,我们可以将N!=>N *(N-1)!
同理求(N-1)!=>(N-1) * (N-2)!
……
如此递归下去直到求1!为止。这个问题就解决了
代码如下(求N!):
public static int funcyion(int N){
if(N==1){
return 1;
}
return N*funcyion(N-1);
}
注意:
1.每次递归的时候这个方法只执行一部分之后就去执行另一部分。
2.归的时候,会把当前方法剩余部分给执行完。
3.递的次数与归的次数相同。
若N=5时,代码执行如下图
完整代码(求5!):
import java.util.Scanner.*;
public class Main {
public static int funcyion(int N){
if(N==1){
return 1;
}
return N*funcyion(N-1);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
System.out.println(funcyion(N));
}
}
输入5
输出120
二、斐波那契数列(递归经典问题)
斐波那契数列是一个经典的递归问题
斐波那契数列(Fibonacci sequence),又称黄金分割数列,又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、55、89、144、233、377、610、987、1597、2584……在数学上,斐波那契数列以如下被以递推的方法定义:
F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
1.递归实现
如此往下递推直到推到终止条件。
2.代码实现
import java.util.Scanner;
public class Main {
public static int fun(int n)
{
if(n==1){
return 0;
} else if (n==2) {
return 1;
} else{
return fun(n-1)+fun(n-2);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
System.out.println(fun(N));
}
}
总结
递归方法在编程过程中会让问题变的简单易懂,让原本困难的题迎刃而解,为了更加深刻的理解还应该多练习才行,希望对大家有所帮助。