递归程序设计与优化模型及其求解.doc

递归程序设计与优化模型及其求解.doc

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
递归程序设计 递归算法实现的程序简洁、易读懂。可以用来解决一些复杂的问题。 在使用Matlab软件进行递归程序设计当中,要特别注意的是:程序中一定要有返回语句(return),以便使程序在适当的时候终止递归调用,否则会出现堆栈溢出,甚至导致程序中断退出。为防止程序异常终止,可以添加异常处理代码(try…catch…end)。 递归程序设计的第一步,要分析问题,建立问题求解的递推关系式或算法。然后再进行程序设计实现。 计算阶乘 从n个数中取n个数的数的全排列记为,且有。 因此建立其求阶乘的递推关系式:,结束条件:。 计算阶乘的Matlab函数如下: function r=factorial(n) %计算n的阶乘 if n==1 r=1; return end r=n*factorial(n-1); 例子: 再命令行输入factorial(3)则返回6 组合数学中的Pascal公式 从n个数中取r个的组合数记为,且有,。 组合数学中又这样的Pascal公式: 。 因此可以编写如下的函数求组合数: function num=getcom(n,r) if r==0 | (n==r) %结束条件 num=1; return end if r==1,%2004-12-7add num=n; return end num=getcom(n-1,r)+getcom(n-1,r-1); 汉诺塔问题 “Hanoi塔”问题 有3根柱子:A,B,C,现有n个大小不一的圆盘依半径的大小,从下而上套在柱子A上,最大的圆盘放在柱子A的最下面。现要将所有的圆盘从柱子A移动到C柱子上,每次只允许从一根柱子转移到另一根柱子上,且在转移过程中不允许出现大圆盘放在小圆盘上。B盘为可以利用的柱子,每次只允许移动一个盘子,请问要转移多少次才能将柱子A上的圆盘全部转移柱子C上? “Hanoi塔”是组合数学中的著名问题之一。 问题求解 主程序调用: global nmove nmove=0; hanta(‘A’,’B’,’C’,3) nmove 说明:上面的程序调用表示有3根柱子:A ,B,C,现有3个盘子在A上,要将其移动到C盘上,B盘为可以利用的柱子。 实现程序 function hanta(posfrom,posmiddle,posend,numplate) global nmove%移动次数,调用nmove之前声明nmove为全局变量,且赋值为0 if numplate==1 sprintf(从%s移到%s,posfrom,posend) nmove=nmove+1; return end try hanta(posfrom,posend,posmiddle,numplate-1) sprintf(从%s移到%s,posfrom,posend) nmove=nmove+1; hanta(posmiddle,posfrom,posend,numplate-1) catch catch error end 实例:当有3个盘子时,该递归程序的输出为: ans = 从A移到C ans = 从A移到B ans = 从C移到B ans = 从A移到C ans = 从B移到A ans = 从B移到C ans = 从A移到C nmove = 7 案例:商人安全过河问题 三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行。随从们密约,在河的任一岸,一旦随从的人数比商人多,就杀人越货。但是如何乘船渡河的大权掌握在商人们手中。商人们怎样才能安全渡河呢? 问题分析 设商人某岸上的人数为x,随从人数为y; 此岸彼岸商人与随从的人数必须满足以下下面其中一种情况: x不等于0时,x=y; x等于0 以上两种称为安全状态。 每次划行时做出决策: 可能的决策必须满足两个条件: 船上载人不超过2人; 确保出发点岸上和到达对岸后,两岸的人数必须同时满足安全状态 模型建立 设第k次渡河前此岸的商人数为xk,随从人数为yk,k=1,2,……, xk,yk=0,1,2,3. 将二维向量Sk=(xk,yk)定义为状态(即第k-1次渡河后的此岸状态)。安全渡河条件下的状态几何称为允许状态集合,记作S,根据问题分析很容易得到 S={(x,y)|(0,0),(0,1),(0,2),(0,3),(1,1),(2,2)(3,0),(3,1),(3,2),(3,3) } (1) 注:为什么不能取(1,0),(2,0),(2,1)? 记第k次渡船上的商人数为uk,随从数为vk,将二维向量dk={ uk,vk}定义为决策。允许决策集合记作D,由小船的容量可知 D={(u,v)|

文档评论(0)

71z7it87 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档