对于递归的一些探讨

班号:SW050727
  今天是一节补充教学,隔了三个多月又见面,我和学生们都感觉很兴奋,不过班里只来了7个人,这让班主任阎老师很是气恼,本来是学生要求补习的,却只来了这么几个人。
  文归正题,今天的内容是递归函数,这是第一次讲授这样的内容,以前学编程的时候,对递归没有太深的研究,只是会写递归程序,能看懂,能用递归程序解决实际问题而已,而教学就不能只掌握得这种水平了,于是白天对递归进行恶补。这个班开C语言的时候我没有讲授递归的内容,直接跳过去了,只是在上机的时候给几个学有余力的学生进行了单独辅导,因为我觉得递归这个东西对于初学编程的人来说不太容易理解,应该在学生对编程有了一定的了解,不再有恐惧心理的时候再来讲,就清华软件工程师的教学体系来看,应该放在C++或者Java的课程里面来讲会比较好一些。(不过学生们太郁闷了,C++的主讲竟然是个不负责任的“递归狂”。)
  在白天的“恶补”过程中,在网上看到一篇文章提出了一个很新颖的观点,它提出递归应该是一种结构而不是所谓“递归函数”,这就是我说得在会使用、能懂懂之外的研究,一般教材中(不论是C语言还是其他什么语言)会把递归放在函数一章的最后一节,名曰“递归函数”,不能否认,实现递归的函数确实应该叫做“递归函数”,但是至于递归本身,我认为也应该是一个基于函数的结构,我们常说面向过程的编程有三种基本结构:顺序、分支、循环;我认为是不是递归可以跻身第四种结构或者说基本结构?因为实际上我们在探讨高级递归应用的时候,总会提到,用递归的程序都可以用迭代(其实也就是循环)的方式代替,而所有的循环程序也都可以改写成递归,这两者之间的转换只是一个程序设计难度、易读性以及程序执行效率的问题。
  实际上递归时有弱点的,我们一般的教材上对递归的弱点往往都采取了回避的态度,我个人是不赞同大量使用递归的,因为递归程序往往缺乏易读性,而且编写困难,最重要的是,递归的致命弱点在于大量占用内存,越是复杂的递归结构占用内存越多(每次递归都要保存现场、转去执行新的函数),这在其他结构中是不会出现的,当然,递归有时候可能能够以空间换时间,这是递归存在的理由,在软件工程当中,空间复杂度和时间复杂度都是讨论算法优劣的因素。我在课上给学生的是:对于递归,初学的时候以了解为主,尽量不要去碰,等到自己有了数年的工作经验,再去自己判断遇到的问题是应该用递归还是循环为佳。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值