数据结构-简单的递归程序该如何写?

首先需明确一下什么是递归?
递归的定义是这样的:程序调用自身的编程技巧称为递归( recursion)。
一般的程序在函数调用的过程中,存在一个被称为函数栈的空间,调用一个函数,首先要把原函数的局部变量等压入栈中,这是为了保护现场,保证调用函数完成后能够顺利返回继续运行下去。当调用函数返回时,又要将这些局部变量等从栈中弹出。在普通的函数调用中,一般调用深度最多不过十几层,但是运用了递归的函数栈往往就会很深。

如何写一个递归
前面的话,说了感觉和没说一样。如何优雅的写一个递归程序呢?
递归实际上是一种天然的问题解决方法, 如果不会写只是思路没转过来。
例如:汉诺塔问题,最简单去情况:一个盘子的时候,a移动到c。
为什么这个问题复杂呢?因为它上面的盘子不止一个。
怎么让这个问题简单呢?把他上面的的n-1个盘子都移到b搁着。再移动剩下的最后一个盘子。
所以这个程序应该这样写:
如果只有一个盘子, 把a移到c
否则,
把最底下那个盘子外的所有盘子先移到b上, 再移动最下面的移动到c, 再把b上的移过来。

那么具体怎么写这个程序呢?
递归的描述方式,非常像高中数学里面介绍的“数学归纳法”。递归函数的写法的核心是降阶,即:用n-1阶的表达式去描述n阶问题

以上就是我对递归的认识,还是应该多做题呀。做题的时候要多去思考为什么要这么做。最后再转在一段很棒的递归解法的思维步骤:

基准情况
  基准情况其实就是递归的终止条件。其实在实际中,这是十分容易确定的。例如在二分查找中,终止条件就是找到了我们想要的数或者搜索完了整个数组(查找失败)。

不断演进
   演进的过程就是我们思考的过程,二分查找中,就是继续查找剩下的一半数组

用人的思考方式设计
  这条法则我认为是非常重要的,它不会出现在编码中,但却是理解递归的一条捷径。它的意思是说,在一般的编程实践中,我们通常需要用大脑模拟电脑执行每一条语句,从而确定编码的正确性,然而在递归编码中这是不需要的。递归编码的过程中,只需要知道前两条法则就够了。之后我们就会看到这条法则的如何工作的了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值