00:00
这个我们这就讲完,我们关闭,我们打开新的一个章节,新的一个章节要给大家讲解的是一种编程的方式,或者说一种思想,叫什么呢?叫这样子的。使用递归的方式去思考,去编程。那这个地方呢,大家不要小看,也是很重要的啊,也是我们SC的一个呃一个呃,编程的一个精髓,那么我先插入一个分页符写到这来。首先我们来看这个标题,使用递归的方式去思考是编程是什么意思呢?在我们这个SC里面呢,他非常推崇的一种编程方式就是递归。递归,因为递归它更符合这种计算机的一种思维方式,我们用的一般喜欢同学们喜欢的用的是什么?命令式的,就是我告诉你应该怎么做,但计算机呢,它更适合是你不用告诉我怎么做,你就说怎么做,他自己帮你去做,所以说我这里呢,有一个先有几句话,我们先来交代一下,看这里scna是运行在JVMG之上的,因此它具有如下特点,第一个呢,它可以。
01:15
和Java进行相互通讯,无缝接轨。第二个它支持面向对象,就是我们所说的oo。Oo这种编程方式,同时呢,它又支持函数式编程。他写出的程序呢,像动态语言一样简洁。而实际上呢,他确实又是静态语言,他确实是这样子的,开了呢,我们有一个评价。就是他像武林中的集大成者,什么武功都会,所以说他们集成了很多语言的优势,在过去的这个几十年计算机发展历史上呢,它化繁为简,其实大家后面呢,还会进一步的体会它的一个效果,你看它的的确确,你看那个简化效果很明显,对吧,他直接就把底层给你暴露出来了。
02:07
就你写的写的写的这个方式,其实它底层大家也看到它是怎么实现的,然后呢,我们看到啊,为程序员提供了新的选择,设计者马丁奥德斯基希望程序员将编程作为一种简洁的。高效的。还很高效,还很令人愉悦的一种工作,就是我说的这个意思吗?累了吗?困了吗?不用喝红油对吧,编装代码呗,但很困,今天很不开心对吧,今天这个特别不开心,写段代码啊,放松放松,还这个就是scar设计者的一种设计初衷,当然有些同学呢,可能也不一定放松,反而更郁闷的,也是有可能的啊,但是呢,他呢,对这些哥们来说啊,像马丁奥的斯基,像这些老外他们很有意思,老外这个为什么我一直在想这个问题啊,就为什么现在我们学的这个编程语言也好,操作系统也好,其实都是老外的呢。
03:06
其实大家想一个道理,其实还是我们中国,呃,中国现在有一个情况就是大家活的都比较比较累,呃,就说你没有太多时间去做一些原创性的工作,而且有时候也很郁闷,你刚刚做了一个原创吧,直接就完全拷背就过来了。甚至有时候你都不知道这是谁先写出来的对不对,但老外呢,他是有这个奉献精神的,他呢干什么呢?他们一般来讲,像北欧,北欧那些地方,大家可能没去,我也没去过啊,但我同学呃,在大学毕业过后,他们就到就就就移民了,也有有些大学毕业完了就到那个美国去留学,后面就不回来了,这些哥们。他们在说这个像北欧那些国家还是福利非常的好,你别说俄罗斯知道吧,俄罗斯这个国家对吧,天天打仗,但是人家福利很好,生病了你到医院去看病。啊,免费的。你看中国要生一个病,你直接就回到解放前啊,一个人生病全家倒霉,知道吗?一个人生病你试试看,你看过看过那个我是药神,看过没有,那一家人全部都等死了,那整个笼罩在阴云之下。
04:14
你哪有时间去搞原创啊?所以老外,老外他生活相对啊,我们说相对,当然你也不要说老外很很舒服,我们也不羡羡慕老外,因为你羡慕北欧,毕竟你没有生在生活在这个那个索马里是吧,索马里更惨,那也是外国,所以说中国呢,还算是可以,你要比上不族,比下海是有余的,对不对,你要跟非洲比,我们还是非常幸福的,对那些国家那么水都没有喝的天天啊,就是因为太阳照的也很厉害,晒黑那么多对不对?好那么这个呢,他们他们确实有一点时间来做一些原创工作,其其事实也是这样子的,我们学的大数据,我们学的H5,我们学的phg Python,全部是老外的,为什么?难道我们中国人很笨吗?这个我倒不承认,那中国人也有,中国古代四大发明都是中国人搞的,对不对?现在还有十大发明吗?早霉了,就是因为太累了,天天都在想。
05:09
天天在想老板给我写的一个hello word我都没写完,天天都是反复性,重复性的一些工作,很低端的,那么我们将来呢,就是同学们,如果说将来有点时间,我建议大家呢,就是如果这个工作老板让你老是重复一个没有意义的工作,天天做这个事情。天天做这个事情最好呢,干上一段时间就不要干了,因为这个人就废了啊,你过上几年20年,你除了会写这个反复性的工作,你没有创造力,你过十年你还是这个价,但有些同学老师你不是也在天天重复吗?老师已经废了,所以说我就我现在都不不想这事了,但是我希望我的学生不要费,你知道吧啊,所以说所以说有些中国活跃了一帮人,你们你们不知道中国活跃了一帮专门给写了一个开源软件的,在我们那个时代,机器家伙可赚钱了,他们写什么呢?写完那个软件过后,他们是发布到那个网上去,他们一般写英文软件,写完这个英文软件呢,发布到了一个像呃一些公开的一些那个论坛上去,大家下载下载过他一个,他留了一个电子邮件,就说你如果觉觉得这个产品好,就给我捐献点钱,那个时候那老外还是真的挺讲礼貌的。
06:24
他们说写完了过后,老外还真在借钱哦,就用完了过后你想一想,你一个软件假设有10万人在用,你写一个很小众的软件,假设有十万人用,这不不算一个大数字嘛,因为你这个各个应用场景都会有,那别人真的每一每一个人,我们就说每一个人啊,一个月给你捐一个美元。十万人就是10万美元了。我们假设,假设不是十万人用,假设十万人有10%的给你,给你打就是1万美金,1万美金和人民币就七八万,你天天给家升级维护,还是有还是有人给你都要,但是中国人一般不愿意给啊,中国人一般是一般活了一大帮这个搞破解的啊,搞搞搞破解的,他这个呢也有价值,因为真的反过来我们说啊,如果我们我们这个所有的软件都要给钱,我们中国人是用不起的。
07:17
用不起那个新加坡,新加坡那个全是正版,据据说一套简单像WIN7都得好几千块钱,然后你在买word文档,Word这个软件,他们全是正版,你你看到人家装的那个电脑上很很少软件,用不起啊啊用不起,好这是大家说的,就是大家以后呢,要轻松简洁高效而又愉快的从事我们程序员工作,然后呢,大家多去做一些原创性的工作,OK,好这个说完以后呢,我们来看看范式。那么在我们康里面,他提倡是范式,范式里面最大的赢家就是面向对象,就是我们说oo,那么我要给他阐述的一个原则,就是说面向对象呢。
08:03
有这么一个概念,就是大家在讨论啊,面向对象,严格意义上说,它不是一种编程方式,它不是一个一种很纯粹的编程方式,呃,那么严格意义上说,编程方式有几种呢?有这么三种,一种叫命令式,一种,一种叫函数式。还有一种叫逻辑式,那么面向对象其实就是这几种范式的一个交叉产物,那为什么这么讲呢?大家想一想,其实你这个面向对象里边,它其实是是容纳了,它是相当于把这些东西融进去了。对吧,因为在你在这个没有面向对象之前的时候呢,函数方法早就有了,所以它其实是一个交叉的产物。那么在目前的传统语言里面呢,我们只有命令式的编程得到了强调,它是什么意思呢?就说就是程序员告诉计算机应该怎么做,就你应该怎么做,我就告诉你一步一步怎么去做。
09:02
它那个过程写的很详细。那么而递归呢?则通过灵巧的函数定义告诉计算机做什么。这个大家在后面可以感觉到,就说当你告诉计算机做什么的时候,其实你的人脑,你的人脑已经反应不过来了,比如说你写一段那个回溯。你写回溯里面用到递归,其实它准确的是告诉计算机做什么。因为它里面要要不停的往里面递归,你是很难一下子就看到它是怎么做的,而我们命令式编程,它是很直接很简洁的说,第一步怎么做,第二步怎么做,第三步怎么做,调什么函数的结果,OK。但是递归呢,它更重的是计算机做什么,待会儿我再举例子体验一下啊,因此呢,命令是编程思维的程序中,现在是大多数程序采采用的,而递归呢,出境的,出境的概率很小,我们从学编程开始,其实都很少用这个递归,我们更多的是用命令式或者是迭代式的编程方式,那么大家可以看到我们来看几个递归的这么几个案例。
10:07
好,递归之所以没有得到这个加强呢,也有一些原因,我我个人感觉啊,递归第一个就是它相对比较困难。就他理解起来有点困难,第二个呢,递归在我们开发中呢,用的不好,注意听啊,如果说用的不好的确会影响效率,因为递归用的不好呢,这个递归它会重复的计算,一旦重复计算,你的效率就会降低,它重复一次,待会我会举一个例子,让你们看到这个它会调用的次数几乎是呈这个指数的一个形式增加,效率就会急剧降低,所以在递归呢,我们一定要想办法去控制它的这个效率,我待会会讲这个地方啊,来吧,我们现在呢,来做几个案例,加强一下对递归编程的一个理解,我现在出第一个题啊,我们先截取一段。
我来说两句