码迷,mamicode.com
首页 > 其他好文 > 详细

递归详解(一)

时间:2014-12-01 06:25:35      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   color   sp   for   strong   on   div   

 1 public class Digui {
 2 
 3     public static void main(String[] args) {
 4         // TODO Auto-generated method stub
 5           fun(3);
 6     }
 7 
 8     static void fun(int a) {
 9         int i;
10         System.out.print(a);
11         for (i = 0; i < a; i++)
12             fun(a - 1);
13     }
14 
15 }

输出结果:3210102101021010

执行过程

 这么讲吧:
fun(3);//初始调用时,a值等于3

为了方便说,后面调用fun函数时,a值等于几,就叫几号递归
fun(3)//3号递归开始执行
运行printf("%d ",a); //输出3
运行for循环,i=0,i<3,
调用fun(3-1)

fun(2)//2号递归开始执行
运行printf("%d ",a); //输出2
运行for循环,i=0,i<2,
调用fun(2-1)

fun(1)//1号递归开始执行
运行printf("%d ",a); //输出1
运行for循环,i=0,i<1,
调用fun(1-1)

fun(0)//0号递归开始执行
运行printf("%d ",a); //输出0
运行for循环,i=0,i<0,不成立

------------------------>至此,输出了3,2,1,0

0号递归不成立后,回归1号递归的for循环处,进行i++处理,
运行for循环,i=1,i<1,不成立

1号递归不成立后,回归2号递归的for循环处,进行i++处理,
运行for循环,i=1,i<2,
调用fun(2-1)
再度运行fun(1)//1号递归
从上面可以看出,1号递归的运行会输出1,0

------------------------>至此,输出了3,2,1,0,1,0

1号递归不成立后,回归2号递归的for循环处,进行i++处理,
运行for循环,i=2,i<2,不成立

2号递归不成立后,回归3号递归的for循环处,进行i++处理,
运行for循环,i=1,i<3,
调用fun(3-1)
再度运行fun(2)//2号递归
从上面可以看出,2号递归的运行会输出2,1,0,1,0

 ------------------------>至此,输出了3,2,1,0,1,0,2,1,0,1,0

2号递归不成立后,回归3号递归的for循环处,进行i++处理,
运行for循环,i=2,i<3,
调用fun(3-1)
再度运行fun(2)//2号递归
从上面可以看出,2号递归的运行会输出2,1,0,1,0

------------------------>至此,输出了3,2,1,0,1,0,2,1,0,1,0,2,1,0,1,0

2号递归不成立后,回归3号递归的for循环处,进行i++处理,
运行for循环,i=3,i<3,不成立

至此递归结束

所以最后输出结果为:
3 2 1 0 1 0 2 1 0 1 0 2 1 0 1 0

进一步的,将函数改为:

 1 public class Digui {
 2 
 3     static int m = 0;
 4     static int n = 0;
 5     public static void main(String[] args) {
 6         // TODO Auto-generated method stub
 7           fun(3);
 8           System.out.println();
 9           System.out.println("n="+n);
10           System.out.println("m="+m);
11     }
12 
13     static void fun(int a) {
14         int i;
15         System.out.print(a);
16         for (i = 0; i < a; i++){
17             n++;
18             fun(a - 1);
19             m++;
20         }
21     }
22 
23 }

输出结果为:
3210102101021010
n=15
m=15

 

函数执行完n++后,本来还要执行m++,但突然入栈,阻碍了,但出栈时肯定还会接着剩下的执行。n和m的值肯定一样

 

递归详解(一)

标签:style   blog   ar   color   sp   for   strong   on   div   

原文地址:http://www.cnblogs.com/hixin/p/4134090.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!