Java面向对象-递归
递归,就是程序调用自身,我们讲的是方法递归调用,也就是在方法里自己调用自己;
我们给出一个案例,求阶乘 1*2*3*...*(n-1)*n
我们用非递归和递归方式分别实现下,大家可以比较下;
我们先用非递归方式 大家肯定会想到用循环实现,
上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package
com.java1234.chap03.sec03;
public
class
Demo03 {
/**
* 非递归
* @param n
* @return
*/
static
long
notDiGui(
int
n){
long
result=
1
;
for
(
int
i=
1
;i<=n;i++){
result=result*i;
}
return
result;
}
public
static
void
main(String[] args) {
System.out.println(Demo03.notDiGui(
5
));
}
}
|
递归的话 我们首先要找到规律 还有必须有一个出口;
我们来先说说规律 比如求5的阶乘
我们会发现规律
n=5 F(n)=F(n-1)*5 即F(5)=F(4)*5
n=4 F(n)=F(n-1)*4 即F(4)=F(3)*4
n=3 F(n)=F(n-1)*3 即F(3)=F(2)*3
n=2 F(n)=F(n-1)*2 即F(2)=F(1)*2
n=1 1
上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package
com.java1234.chap03.sec03;
public
class
Demo03 {
/**
* 递归方式
* @param n
* @return
*/
static
long
diGui(
int
n){
if
(n==
1
){
return
1
;
}
return
diGui(n-
1
)*n;
}
public
static
void
main(String[] args) {
System.out.println(Demo03.diGui(
5
));
}
}
|