黑马程序员技术交流社区

标题: 计算机是怎么处理递归的?效率比循环高吗? [打印本页]

作者: 黑骏马    时间: 2013-8-1 02:16
标题: 计算机是怎么处理递归的?效率比循环高吗?
本帖最后由 黑骏马 于 2013-8-1 02:25 编辑

比如,求n! 一般都会写这两种方法:
1.循环
  1.     public static int Jiecheng(int n)
  2.     {
  3.         int nJiecheng = 1;
  4.         if (n == 0 || n == 1)
  5.         {
  6.             return 1;
  7.         }
  8.         else
  9.         {
  10.             for (int i = 1; i <= n; i++)
  11.             {
  12.                 nJiecheng *= i;
  13.             }
  14.             return nJiecheng;
  15.         }
  16.     }
复制代码
2.递归
  1.     public static int Jiecheng(int n)
  2.     {
  3.        if (n == 0 || n == 1)
  4.         {
  5.             return 1;
  6.         }
  7.         else
  8.         {
  9.             return Jiecheng(n - 1) * n;
  10.         }
  11.     }
复制代码
两种方法可以实现同样的功能,
递归的方法看起来很简洁,
但理解和描述起来要麻烦点儿,
计算机是怎么理解递归的?
效率会比用循环的方法高吗?




作者: changvh    时间: 2013-8-1 07:21
线程栈有固定的大小,递归的层次太深,可能会溢出
作者: sxdxgzr@126.com    时间: 2013-8-1 08:16
程序调用符合后进先出的原则利用栈来实现递归,递归由于函数调用会产生一定开销,效率较迭代低。
作者: 熊丽    时间: 2013-8-1 19:39
循环的效率更高,一般在写程序时不用递归。
作者: lvjayj    时间: 2013-8-1 21:08
递归是不断引用函数自身,直到引用唯一已知的对象时停止。
递归还是必要的,它往往能把复杂问题分解成更为简单的步骤,而且很能反映问题的本质




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2