我没有怎么系统的学过递归,我只好用例子讲了。如下:
class Demo
{
public static void main(String[] args){
doubleNum(1237);
Num(10);
}
public static void doubleNum(int n)
{
System.out.println(n);
if(n<=5000)
doubleNum(n*2);
System.out.println(n);
}
public static void Num(int n)
{
if(n!=1)
Num(n-1);
System.out.println(n);
}
}
上面运行的结果为:
1237
2474
4948
9896
9896
4948
2474
1237
1
2
3
4
5
6
7
8
9
10
根据上面的结果我们来分析:
public static void doubleNum(int n)
{
System.out.println(n);
if(n<=5000)
doubleNum(n*2);
System.out.println(n);
}
当我们调用doubleNum(1237)传入1237数值
->sop(1237)
->判断条件满足:调用方法doubleNum(1237*2)
->sop(2474)
…直到n*2>5000(这时我们已经打印出了:1237,2474,4948,9896)
->结束了里面调用方法,但是整个方法还没有结束相当于
{
--sop(1237){
----sop(2474){
-------sop(4948){
---------sop(9896)
if条件不满足
---------sop(9896)
------ }sop(4948)
----}sop(2474)
--}sop(1237)
}
上面的sop是输出的意思!!!
public static int diGui(int num){
if(num<=2){
return 1;
}else{
return diGui(num-1)+diGui(num-2);
}
}
上面是斐波拉契数列的递归(换个思路就是倒着推)
{
-----{
-------{
---------{
-----------{
1、(num-2)==1时return 1;
则、(num-1)==2时return 1;
------------}
num=3,return 1+1;2
----------}
num=4,return (1+1)+1;3
-------}
num=5,return 2+3;5
----}
num=6,return 3+5;8
}
可能表达不太恰当,希望多多谅解!!
下面还有个例子:输出sop(abc123);懂了上面的理解下面的应该不是很难!
class Demo4
{
public static void main(String[] args){
String str = DiGui("abc",3);
System.out.println(str);
}
public static String DiGui(String str,int i){
if(i>=1){
return DiGui(str,i-1)+i;
}
return str;
}
}