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

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

作者: 我想起个好名字 | 来源:发表于2018-09-06 14:43 被阅读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。-----------------------------完成了一个“归回来“

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


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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/uarxgftx.html