递归是并行还是串行?-->递归二字顾名思义就是:递过去,归回来。索性叫它做有借有还吧!

需满足条件:

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。-----------------------------完成了一个“归回来“

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


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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 8,777评论 0 2
  • 亲爱的老公: 从来没有这么亲热的叫过你,也从来没有给你写过情书,因为要参加情人节的征文,才写这封信。我想,情人节前...
    风中的糯米阅读 3,418评论 6 16
  • 残秋枯黄,红枫落浓霜 彩蝶谢幕归晚霞 新菊伴斜阳 稻黍归仓,篱栏挂金黄 柿树遥悬红灯笼 照亮晚归羔羊 一个姑娘,将...
    山上人家123阅读 1,696评论 12 21
  • 我可能有打广告的嫌疑,我不否认,但是我对黑蒜醋情有独钟,因为很多人由于我的推荐,自己家的选择就改变了,跟随我一起品...
    山东御鲜苑黑蒜醋阅读 803评论 0 0
  • 看到大家每天都在不断的成长,找原因,想办法,努力改进,那种骄傲和欣喜很难用语言表达,大话谁都会说,但涉及到行动,却...
    思思FineYoga阅读 1,462评论 0 2