A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑骏马 于 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.     }
复制代码
两种方法可以实现同样的功能,
递归的方法看起来很简洁,
但理解和描述起来要麻烦点儿,
计算机是怎么理解递归的?
效率会比用循环的方法高吗?



评分

参与人数 1技术分 +1 收起 理由
赵宗荣 + 1

查看全部评分

4 个回复

倒序浏览
线程栈有固定的大小,递归的层次太深,可能会溢出
回复 使用道具 举报
sxdxgzr@126.com 来自手机 中级黑马 2013-8-1 08:16:53
藤椅
程序调用符合后进先出的原则利用栈来实现递归,递归由于函数调用会产生一定开销,效率较迭代低。
回复 使用道具 举报
循环的效率更高,一般在写程序时不用递归。
回复 使用道具 举报
递归是不断引用函数自身,直到引用唯一已知的对象时停止。
递归还是必要的,它往往能把复杂问题分解成更为简单的步骤,而且很能反映问题的本质
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马