数据结构-递归

原创 2016年05月30日 17:24:52

什么是递归(Recursion)?Wikipedia里递归的定义为Wiki [1]:Recursion is the process of repeating items in a self-similar way.又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。
在知乎上看到一种通俗易懂的解释:假设你在一个电影院,你想知道自己坐在哪一排,但是前面人很多,你懒得去数了,于是你问前一排的人「你坐在哪一排?」,这样前面的人 (代号 A) 回答你以后,你就知道自己在哪一排了——只要把 A 的答案加一,就是自己所在的排了。不料 A 比你还懒,他也不想数,于是他也问他前面的人 B「你坐在哪一排?」,这样 A 可以用和你一模一样的步骤知道自己所在的排。然后 B 也如法炮制。直到他们这一串人问到了最前面的一排,第一排的人告诉问问题的人「我在第一排」。最后大家就都知道自己在哪一排了。
这张图片也能有趣的反映递归现象。
照片中的人中的照片中的人中的照片
递归在计算机中是指一个程序调用其本身,为了保证只进行有限次运算,不使计算机必须要有终止条件(base case)。
最后给出使用递归计算高斯求和公式的程序:

/*
 * Gauss summation
 */

int f(n)
{
    if (n == 1) 
    { 
        return 1;  // base case
    }
    else 
    {
        return f(n-1) + n;  // induction
    }
}

已知n=1时f(n)的值、f(n)和f(n-1)的关系,只需代入公式求解。
总之,递归的基本思想是把大问题转化为小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况;这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。

数据结构之---栈和递归&函数调用

更正:以下所指ebx应改为eax。 EBX指“基地址”寄存器,在内存寻址时存放基地址;、 EAX是累加器(accumulator),一般用来保存函数的返回值。首先说说递归的实现和栈的关系吧,这里引...
  • github_35681219
  • github_35681219
  • 2016年09月11日 17:11
  • 1120

Java实现树结构数据的递归与非递归遍历

递归与非递归的遍历 递归在很多情况下我们都会使用,比如著名的汉诺塔问题,有时候我们遍历一棵树形数据结构的数据也会需要用到递归,但是并不是绝对。原因是:以递归遍历一棵树型结构的数据为例,当这个树足够深的...
  • gemuandyou
  • gemuandyou
  • 2015年03月05日 14:16
  • 3505

数据结构-树-二叉树遍历完整可执行代码(递归/非递归)

数据结构-树-二叉树遍历完整可执行代码(递归/非递归) mark:有篇博客写的不错,关于非递归算法描述很详细,先记录了。http://www.cnblogs.com/dolphin0520/...
  • hitwhylz
  • hitwhylz
  • 2013年11月06日 12:37
  • 3111

数据结构-非递归遍历二叉树

  • 2017年11月16日 10:28
  • 216KB
  • 下载

LUT算法与数据结构课程设计---递归替换和二叉排列树

  • 2017年12月10日 17:31
  • 307KB
  • 下载

LUT算法与数据结构--递归替换问题和兰州道路交通信息查询

  • 2017年12月10日 17:43
  • 313KB
  • 下载

LUT算法与数据结构-- 递归替换和图书管理

  • 2017年12月10日 18:02
  • 370KB
  • 下载

数据结构之栈与递归

  • 2013年07月17日 15:15
  • 1KB
  • 下载

Hanoi塔递归演示系统 为数据结构课程做CAI演示系统 java 源码 毕业设计 论文

  • 2010年06月03日 00:08
  • 259KB
  • 下载

VC++2012编程演练数据结构《7》堆栈实现递归运算

  • 2012年11月19日 18:42
  • 4KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构-递归
举报原因:
原因补充:

(最多只允许输入30个字)