首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 递归转非递归求N的阶乘
【标  题】:递归转非递归求N的阶乘
【关键字】:
【来  源】:http://www.cublog.cn/u/19701/showart.php?id=134791

递归转非递归求N的阶乘

1.
//递归求N阶乘
pvivate int factorial(int n)
{
   if ( n > 1 )
   {
       return n * factorial ( n - 1 );
   }
   else if ( n == 1 )
   {
      return 1;
   }
   else
   {
        throw new ArgumentException ( "Argument Error!");
   }
 
2.
  非递归方法一:循环法,前提是,待解决问题必须能够分解出可循环规律方可
而n! = n! = n*(n-1)*(n-2)*....*1;从循环的角度理解就是:n!表示执行n次循环计算一个增量k,初始k=1和结果t=1;每次t乘以k++的值.从而可以得到:
private int factorialByLoop( int n )
{
   int t = 1;
   int k = 1;
   while ( k <= n )
   {
      t = t * k;
      k ++;
   }
   return t;
 }
3.
非递归方法二:自定义堆栈法,目的是为不能分析出来循环的递归操作提供开销可控的方法.如:
 private int FactorialByStack(int n)
 {
    Stack<int> s = new Stack<int>
();
    int t = 1
;
    int
 temp;
 
   s.Push(n);
    while ((temp = s.Peek()) != 1
)
   
{
        t *=
 s.Peek();
        s.Pop();
        s.Push(temp - 1
);
    }

    return t;
 }
前两种方法懂,最后一种方法不懂.
组态软件开发进度 2006-6-30:【上一篇】
C#把数据写如EXCEL文件,以及如何创建EXCEL文件:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 用Excel快速计算天数差
  • 定义数据表之间的关联
  • ERP咨询面面观
  • RFC793中文翻译一(dlmu2001)
  • 小心借情人节传播的QQ尾巴(第3版)
  • Solaris 操作系统的备份和恢复实用工具
  • Toon Shading Using GLSL
  • C语言中的IO和IO重定向
  • IE 代理服务器设置程序实现
  • 流光,实战美萍软件远程开会员之方法
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.