递归是并行还是串行?-->递归二字顾名思义就是:递过去,归回来。

2018-09-06  本文已影响0人  我想起个好名字

需满足条件:

1:临界条件(递归出口)

2:递归公式

3:总结条件

当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

例子代码:

public static void test2(int n){

System.out.println("1-lexe:"+  n);//#1

if(n <3)

test2(n +1);

System.out.println("2-lexe:"+  n);//#2

}

代码的结果:

1-lexe: 1

1-lexe: 2

1-lexe: 3

2-lexe: 3

2-lexe: 2

2-lexe: 1


首先, main() 调用了函数 test2(1) ,于是test2(1)中形参 n 的值是 1, 故打印语句 #1 输出了:1-lexe:1  。

然后,由于 n < 3 ,( 第 2 级 )的test2(n+1)被调用. 此时n+1=2,故打印语句 #1 输出了:1-lexe:2。

然后,由于 n < 3 ,( 第 3 级 )的test2(n+1)被调用. 此时n+1=3,故打印语句 #1 输出了:1-lexe:3。

由于此时,n=3 , 不再执行if语句。

然后执行 #2 语句 , 因为此时 n 的值为 3 , 故打印语句 #2 输出了: 2-lexe:3 。  ---------------------------这时完成了一个“递过去”

此时函数调用完成

现在函数需要“归回来” , 回到最后一次调用函数的地方 , 即 n+1=2 的地方 , 故打印语句 #2 输出了:2-lexe:2。

再返回上一级调用的地方 , n =1 的地方 , 故打印语句 #2 输出了:2-lexe:1。-----------------------------完成了一个“归回来“

其实他的”归回来“的切入点就是函数的调用点 ,获取此处的参数值 , 一级一级的往外突围就出来了。


总结:通过以上结果可以得出,递归本质是串行的,它的工作原理是一个由外到里、由里到外串行运行的过程,直到所有的由外到里“递出去”再由里到外全部“归回来”,该过程也就结束了。

上一篇下一篇

猜你喜欢

热点阅读