Access交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 产品
  • 活动
  • 培训
  • 招聘
  • 论坛
  • 商城
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 在数据库实现密码管理的另一..
  • 改变数据来源来实现不同目的..
  • 如何进入程序设计的领域(作..
  • 数据库与照片的关系如何处理..
  • 抄Access窗体的技巧
  • 用函数简化你的字符串连接语..

最新文章

  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • Access数据库设计技巧..
  • 使用Access和Exce..

联系方式

Access交流网

电  话:0760-88315075
热  线:0760-88315075

邮  编:528463
咨询QQ:1918333016
营销QQ:4008553990

Email:1918333016@qq.com

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 心得/经验/绝招
心得/经验/绝招

递归算法

递归算法
  程序调用自身的编程技巧称为递归( recursion)。
  一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
   注意:
   (1) 递归就是在过程或函数里调用自身;
   (2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。
  一个比较经典的描述是老和尚讲故事,他说从前有座山,山上有座庙,庙里有个老和尚在讲故事,他说从前有座山,山上有座庙,庙里有个老和尚在讲故事,他说从前有座山, ……。这样没完没了地反复讲故事,直到最后老和尚烦了停下来为止。
  反复讲故事可以看成是反复调用自身,但如果不能停下来那就没有意义了,所以最终还要能停下来。递归的关键在于找出递归方程式和递归终止条件。即老和尚反复讲故事这样的递归方程式要有,最后老和尚烦了停下来这样的递归的终止条件也要有。
阶乘的算法可以定义成函数

当 n>0时,用 f(n-1)来定义 f(n),用 f(n-1-1)来定义 f(n-1)……,这是对递归形式的描述。
当 n=0时, f(n)=1,这是递归结束的条件。
例:用递归策略求N!的解。
    N!=1*2*3*...*N
   分析:
    (1) 不运用递归的解法  
    (2) 运用递归策略  
      N!=1*2*3*...*N
       =[1*2*3*...*(N-1)]*N
    (N-1)!=1*2*3*...*(N-1)
    设 f(N)=N!
    那么 f(N-1)=(N-1)!
    则 f(N)=f(N-1)*N
    这就是递归式子,由于式子中有N-1,所以N>=1,递归出口的条件是N=1时。
   函数模式:
    function f(n:integer):longint;
    var
     ...
    begin
     if 递归出口的时候 then
       f:=1
     else
       f:=f(n-1)*n;
     end;
递归算法一般用于解决三类问题:
⑴. 数据的定义形式是按递归定义的。
比如阶乘的定义。        
例 1 又如裴波那契数列的定义: f(n)=f(n-1)+f(n-2); f(0)=1; f(1)=2
对应的递归程序为:
var n:integer;
function f(n:integer):longint;
begin
     case n of
        0:f:=1;  { 递归结束条件 }
        1:f:=2;
      else
        f:=f(n-1)+f(n-2)   {递归调用}
     end
end;
begin
     readln(n);
     writeln(f(n))
end.
这类递归问题往往又可转化成递推算法,递归边界作为递推的边界条件。
⑵. 问题解法按递归算法实现。例如回溯等。
⑶. 数据的结构形式是按递归定义的。如树的遍历 , 图的搜索等。
递归解决实际问题的例子很多,如经典的梵塔问题。
例 2 梵塔问题:有 n个半径各不相同的圆盘,按半径从大到小,自下而上依次套在 A柱上,另外还有 B、 C两根空柱。要求将 A柱上的 n个圆盘全部搬到 C柱上去,每次只能搬动一个盘子,且必须始终保持每根柱子上是小盘在上,大盘在下。
在移动盘子的过程当中发现要搬动 n个盘子,必须先将 n-1个盘子从 A柱搬到 B柱去,再将 A柱上的最后一个盘子搬到 C柱,最后从 B柱上将 n-1个盘子搬到 C柱去。搬动 n个盘子和搬动 n-1个盘子时的方法是一样的,当盘子搬到只剩一个时,递归结束。
程序如下:  
var a,b,c,number:integer;
procedure move(n,a,b,c:integer);
begin
     if n=1 then writeln(a,'->',c)
     else
         begin
              move(n-1,a,c,b);
              writeln(a,'->',c);
              move(n-1,b,a,c)
         end;
end;
begin
     write('the number of dish:');
     readln(number);
     move(number,1,2,3);
     readln
end.
自然数的拆分,数字的拆分等都可以用到递归算法。
例 3 要求找出具有下列性质的数的个数 (包含输入的自然数 n):
先输入一个自然数 n(n<=500),然后对此自然数按照如下方法进行处理 :
①. 不作任何处理 ;
②. 在它的左边加上一个自然数 ,但该自然数不能超过原数的一半 ;
③. 加上数后 ,继续按此规则进行处理 ,直到不能再加自然数为止 .
样例 :  输入 :  6
满足条件的数为    6
                16
                26
               126
                36
               136
输出 :  6
这道题只需求出满足条件的数的个数,在 n值不大的情况下用递归求解比较方便,因为它本身题目的条件就是递归定义的。
递归的样例程序如下:
var n,i:integer;
    s:real;
procedure qiu(x:integer);
var k:integer;
begin
     if x<>0 then
     begin
          s:=s+1;
          for k:=1 to x div 2 do qiu(k)
     end
end;
begin
     readln(n);
     s:=0;
     qiu(n);
     writeln(s:2:0)
end.
递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
发布人:Grant-Access中国  
分享到:
点击次数:  更新时间:2006-11-06 21:55:27  【打印此页】  【关闭】
上一条:用代码隐藏ACCESS窗口  下一条:在Word中利用Access的数据



相关文章

  • • Access数据库设计技巧-第五部分
  • • Access数据库设计技巧-第四部分
  • • Access数据库设计技巧-第二部分
  • • Access数据库设计技巧-第一部分
  • • Access数据库设计技巧-第三部分
  • • 使用Access和Excel之间的选择理由
  • • access开发应用程序的过程汇总
  • • ACCESS提示错误信息,自动崩溃,数据库损坏的问题与解决办法

热门文章

  • [2009-11-17] 《vb函数全集》电子书access数据库
  • [2009-08-22] ACCESS数据访问页配置实例access数据库
  • [2005-08-13] 快速实现 Integer值 与 Byte 互换算,拓展思路access数据库
  • [2013-09-29] mdb快捷方式拖到桌面,打开会出现“不能找到数据库错误”access数据库
  • [2009-10-26] 数据库与照片的关系如何处理?access数据库
  • [2004-10-07] 用WSH对象获取系统目录access数据库

热门产品

  1. 销售宝销售管理软件--让销售像“偷菜”一样简单!

    销售宝销售管理软件--让销售像“偷菜”一样简单!

  2. 通用票据打印软件

    通用票据打印软件

  3. Access加密狗系统4.05新版发布

    Access加密狗系统4.05新版发布

公司动态|在线留言|在线反馈|联系我们|友情链接|会员中心|站内搜索|网站地图

中山市天鸣科技发展有限公司 版权所有 1999-2018 粤ICP备10043721号

广东省中山市西苑广场富贵阁20楼A座

电话:0760-88315075 手机:13928102596 QQ:1918333016

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2022  www.metinfo.cn