什么是递归,什么时候应该使用它?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (7)

在邮件列表和在线讨论中,似乎经常出现的一个话题是计算机科学学位的优点(或不足)。一个似乎一次又一次出现在消极方的论点是,他们已经编码了一些年,而且从来没有使用过递归。

所以问题是:

  1. 什么是递归?
  2. 我什么时候使用递归?
  3. 为什么人们不使用递归呢?
提问于
用户回答回答于

简单的英语递归例子。

A child couldn't sleep, so her mother told her a story about a little frog,
    who couldn't sleep, so the frog's mother told her a story about a little bear,
         who couldn't sleep, so the bear's mother told her a story about a little weasel... 
            who fell asleep.
         ...and the little bear fell asleep;
    ...and the little frog fell asleep;
...and the child fell asleep.
用户回答回答于

要了解原因,请遍历上述语言用于调用函数的步骤:

  1. 空间被雕刻在堆栈函数的参数和局部变量
  2. 函数的参数被复制到这个新空间
  3. 控件跳转到函数。
  4. 函数的代码运行
  5. 函数的结果被复制到返回值中
  6. 堆栈被重绕到它以前的位置。
  7. 控件跳回调用函数的位置。

执行所有这些步骤都需要时间,通常比循环迭代所需的时间要多一点。然而,真正的问题在于第一步。当许多程序启动时,它们为堆栈分配一小块内存,当它们耗尽内存时(通常,但并非总是由于递归),程序会因为堆栈溢出.

扫码关注云+社区