




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何用栈实现递归与非递归的转换一.为什么要学习递归与非递归的转换的实现方法?
1)并不是每一门语言都支持递归的.
2)有助于理解递归的本质.
3)有助于理解栈,树等数据结构.二.递归与非递归转换的原理.
递归与非递归的转换基于以下的原理:所有的递归程序都可以用树结构表示出来.需要说明的是,这个"原理"并没有经过严格的数学证明,只是我的一个猜想,不过在至少在我遇到的例子中是适用的.
学习过树结构的人都知道,有三种方法可以遍历树:前序,中序,后序.理解这三种遍历方式的递归和非递归的表达方式是能够正确实现转换的关键之处,所以我们先来谈谈这个.需要说明的是,这里以特殊的二叉树来说明,不过大多数情况下二叉树已经够用,而且理解了二叉树的遍历,其它的树遍历方式就不难了.1)前序遍历a)递归方式:[code:1:1f2a39cc2d]voidpreorder_recursive(BitreeT)/*先序遍历二叉树的递归算法*/{if(T){visit(T);
/*访问当前结点*/preorder_recursive(T->lchild);/*访问左子树*/preorder_recursive(T->rchild);/*访问右子树*/}}[/code:1:1f2a39cc2d]b)非递归方式[code:1:1f2a39cc2d]voidpreorder_nonrecursive(BitreeT)/*先序遍历二叉树的非递归算法*/{initstack(S);push(S,T);
/*根指针进栈*/while(!stackempty(S)){while(gettop(S,p)&&p){/*向左走到尽头*/visit(p);/*每向前走一步都访问当前结点*/push(S,p->lchild);}pop(S,p);if(!stackempty(S)){/*向右走一步*/pop(S,p);push(S,p->rchild);
}}}[/code:1:1f2a39cc2d]2)中序遍历a)递归方式[code:1:1f2a39cc2d]voidinorder_recursive(BitreeT)/*中序遍历二叉树的递归算法*/{if(T){inorder_recursive(T->lchild);/*访问左子树*/visit(T);
/*访问当前结点*/inorder_recursive(T->rchild);/*访问右子树*/}}[/code:1:1f2a39cc2d]b)非递归方式[code:1:1f2a39cc2d]void
inorder_nonrecursive(BitreeT){initstack(S);/*初始化栈*/push(S,T);/*根指针入栈*/while(!stackempty(S)){while(gettop(S,p)&&p)
/*向左走到尽头*/push(S,p->lchild);pop(S,p);/*空指针退栈*/if(!stackempty(S)){pop(S,p);visit(p);/*访问当前结点*/push(S,p->rchild);/*向右走一步*/}}}[/code:1:1f2a39cc2d]3)后序遍历a)递归方式[code:1:1f2a39cc2d]voidpostorder_recursive(BitreeT)/*中序遍历二叉树的递归算法*/{
if(T){
postorder_recursive(T->lchild);/*访问左子树*/
postorder_recursive(T->rchild);/*访问右子树*/
visit(T);
/*访问当前结点*/
}}[/code:1:1f2a39cc2d]b)非递归方式[code:1:1f2a39cc2d]typedefstruct{BTNode*ptr;enum{0,1,2}mark;}PMType;
/*有mark域的结点指针类型*/voidpostorder_nonrecursive(BiTreeT)/*后续遍历二叉树的非递归算法*/{PMTypea;initstack(S);
/*S的元素为PMType类型*/push(S,{T,0});
/*根结点入栈*/while(!stackempty(S)){pop(S,a);switch(a.mark){case0:push(S,{a.ptr,1});
/*修改mark域*/if(a.ptr->lchild)
push(S,{a.ptr->lchild,0});/*访问左子树*/break;case1:push(S,{a.ptr,2});
/*修改mark域*/if(a.ptr->rchild)
push(S,{a.ptr->rchild,0});/*访问右子树*/break;case2:visit(a.ptr);
/*访问结点*/}}}[/code:1:1f2a39cc2d]
4)如何实现递归与非递归的转换
通常,一个函数在调用另一个函数之前,要作如下的事情:a)将实在参数,返回地址等信息传递
给被调用函数保存;b)为被调用函数的局部变量分配存储区;c)将控制转移到被调函数的入口.
从被调用函数返回调用函数之前,也要做三件事情:a)保存被调函数的计算结果;b)释放被调
函数的数据区;c)依照被调函数保存的返回地址将控制转移到调用函数.
所有的这些,不论是变量还是地址,本质上来说都是"数据",都是保存在系统所分配的栈中的.
ok,到这里已经解决了第一个问题:递归调用时数据都是保存在栈中的,有多少个数据需要保存
就要设置多少个栈,而且最重要的一点是:控制所有这些栈的栈顶指针都是相同的,否则无法实现
同步.
下面来解决第二个问题:在非递归中,程序如何知道到底要转移到哪个部分继续执行?回到上
面说的树的三种遍历方式,抽象出来只有三种操作:访问当前结点,访问左子树,访问右子树.这三
种操作的顺序不同,遍历方式也不同.如果我们再抽象一点,对这三种操作再进行一个概括,可以
得到:a)访问当前结点:对目前的数据进行一些处理;b)访问左子树:变换当前的数据以进行下一次
处理;c)访问右子树:再次变换当前的数据以进行下一次处理(与访问左子树所不同的方式).
下面以先序遍历来说明:[code:1:1f2a39cc2d]voidpreorder_recursive(BitreeT)/*先序遍历二叉树的递归算法*/{if(T){visit(T);
/*访问当前结点*/preorder_recursive(T->lchild);/*访问左子树*/preorder_recursive(T->rchild);/*访问右子树*/}}[/code:1:1f2a39cc2d]
visit(T)这个操作就是对当前数据进行的处理,preorder_recursive(T->lchild)就是把当前数据变换为它的左子树,访问右子树的操作可以同样理解了.
现在回到我们提出的第二个问题:如何确定转移到哪里继续执行?关键在于一下三个地方:a)确定对当前数据的访问顺序,简单一点说就是确定这个递归程序可以转换为哪种方式遍历的树结构;b)确定这个递归函数转换为递归调用树时的分支是如何划分的,即确定什么是这个递归调用树的"左子树"和"右子树"c)确定这个递归调用树何时返回,即确定什么结点是这个递归调用树的"叶子结点".三.三个例子
好了上面的理论知识已经足够了,下面让我们看看几个例子,结合例子加深我们对问题的认识.即使上面的理论你没有完全明白,不要气馁,对事物的认识总是曲折的,多看多想你一定可以明白(事实上我也是花了两个星期的时间才弄得比较明白得).
1)例子一:[code:1:1f2a39cc2d]f(n)=n+1;(n<2)f[n/2]+f[n/4](n>=2);这个例子相对简单一些,递归程序如下:intf_recursive(intn){intu1,u2,f;毅if(n抚<2)握堡f=n赞+1;光捞else忠{南u1=欲f_rec咸ursiv摩e((in惕t)(n/汽2));溪u2=少f_rec坛ursiv高e((in命t)(n/雷4));骨f=u仓1*u洋2;
羊}竞retur谎nf;祥}[/co粮de:1:穴1f2a3淹9cc2d鸡]筑
下面部按照我们上原面说的,确乳定好递归调圣用树的结构并,这一步是千最重要的.愁首先,什么俩是叶子结点程远,我们看到裹当n<犁2时f=赢n+冬1,这就是丸返回的语句杯,有人问为励什么不是f抓=u1粗*u2阵,这也是一叉个晴返回的语句卷呀?答案是凤:这条语句宇是在u1栗=exm协p1((i乳nt)(n岩/2))和发u2=絮exmp1蜡((int抱)(n/4于))之后穷执行的,是阻这两条语句厉的父结点.欺其次,什洽么是当前结微点,由上面鲜的分析,f卡=u1歪*u2暗即是父结点磁歇.然后,顺偏理成章的u都1=e踩xmp1(霉(int)脸(n/2)失)和u2播=exm挤p1((i筛nt)(n旗/4))就煎分别是左子柄树和右子腹树了.最后悠,我们可以慈看到,这个答递归函数可捆以表示成后角序遍历的二央叉调用树.瑞好了,树的栗情况分析崖到这里,下陶面来分析一潮下栈的情况怀,看看我们膝要把什么数妙据保存在栈据中,在上面旁给出的后序渣遍历的如果猪这个过程你灵没胜非递归程序目中我们已经劲看到了要加区入一个标志防域,因此在旗栈中要保存股这个标志域豪;另外,u搅1,u2和摔崭每次调用递熟归函数时的删n/2和n岸/4参数都断要保存,这富样就要分别恐有三个栈分损别保存:标碧志域,返回军量负和参数,不姐过我们可以题做一个优化尤,因为在向哭上一层返回乔的时候,参愈数已经没有孕用了,而返乡回量也停只有在向上呼返回时才用姜到,因此可溜以把这两个爷栈合为一个傍栈.如果对逢于上面的分绒析你没有明冒白,建胁议你根据这响个递归函数砍写出它的递估归栈的变化库情况以加深窃理解,再次盖重申一点:系前期对树结地构和齐栈的分析是甲最重要的,拦如果你的程泡序出错,那下么请返回到典这一步来再脑次分析,最战好把递归调招用树和铜栈的变化情碎况都画出来追,并且结合哥一些简单的衫参数来人工肆分析你的算安法到底出错六在哪里.相
o草k,下面给呈出我花了两净天功夫想出宣来的非递归番程序(再次后提醒你不要霞气馁,大家壶都是这么过谷来释的).沫[code巩:1:1f侮2a39c感c2d]i阿ntf_疾nonre鞭cursi特ve(in及tn)访{究ints商tack[恒20],拢flag[吸20],麻cp;心课/*初始眨化栈和栈顶碌指针*/培在cp=挺0;捆stack破[0]=积n;连flag[云0]=托0;参while汽(cp企>=0)威{菜switc专h(fla生g[cp]程){弟case争0:
/孝*访问的龄是根结点研*/透if(s督tack[升cp]>绿=2)健{/*蛇左子树入栈踏*/桑flag[扑cp]=骆1;
验/*修改废标志域*毕/税cp++;裳推stack君[cp]寨=(in疗t)(st疼ack[c做p-1全]/2桑);恭flag[皱cp]=逮0;暂}els未e{
牧/*否则曾为叶子结点亡*/愤stack摆[cp]慌+=1;洗阔flag[击cp]=行2;木}羽break卸;默case桌1:
/僻*访问的情是左子树用*/按if(s筒tack[肉cp]>交=2)纠{/*宇右子树入栈户*/彩flag[尿cp]=吸2;
爽/*修改头标志域*膀/兼cp+=嘉2;垫stack浩[cp]朗=(in送t)(st限ack[c香p-2速]/4拿);布flag[想cp]=宝1;机}els杯e{
败/*否则女为叶子结点现*/货stack推[cp]统+=1;炕虚flag[狮cp]=王2;段}恰break身;转case陕2:
/件**/滨if(f魄lag[c恶p-1舌]==津2){塌/*当前警是右子树吗摘?*/画/*
驶
*如果悟是右子树,魂那么对某哀一棵子树的容后序遍历已妇经积
*结束脸,接下来就抽是对这棵子布树的根结点彩的访问纱
*/晌stack切[cp-狱2]=喉stac甚k[cp]层*st料ack[c壶p-1碍];墓flag[刚cp-项2]=劣2;章cp=玉cp-区2;塘}els润e
封/*否则淹退回到后序舰遍历的上一邀个结点*符/灭cp--;驰刚break鹅;课}石}谱retur凝nsta扛ck[0]亲;盒}[/co办de:1:怜1f2a3替9cc2d痰]僵涌粮算法分析浑:a)fl惠ag只有三写个可能值:话0表示第一座次访问该结饭点,1表示胖访问的是左熄子树,2表某示确已经结束了温对某一棵子睬树的访问,广可能当前结替点是这棵子以树的右子树趋,也可能是利叶子结点.除b)每锄遍历到某个举结点的时候雹,如果这个存结点满足叶电子结点的条训件,那么把萝它的fla斑g域设为2带;否则根据伏柄访问的是根桶结点,左子偏树或是右子嫌树来设置f命lag域,碗以便决定下叼一次访问该蜡节点时的程骗序转向.估破2)例子二怠土快速排序算跟法虽递归算法如脂下:桌[code初:1:1f亏2a39c狂c2d]v亚oids色wap(i烟ntar疫ray[]吵,int遮low,石int胖high)摆抽{楚intt号emp;罪temp奋=arr腥ay[lo粥w];鼓array寇[low]选=ar什ray[h三igh];尚矩array悔[high谢]=t键emp;餐}泳intp新artit哀ion(i稻ntar遥ray[]吸,int仆low,赤int蜘high)云定{婶intp量;衡p=a嫂rray[变low];垦膀while如(跪low<塞high外){选while辱(low柱<hi嘴gh&&票arra震y[hig痕h]>=膏p)
径high-供-;篮swap(搬array垂,low,所high)喜;多while明(low叹<hi孝gh&&屠arra帖y[low应]
<=禁p)
够low++狱;孝swap(准array液,low,倚high)黎;料}宣retur优nlow百;脖}蹦void支qsort合_recu离rsive偶(int优array暖[],i展ntlo狗w,in验thig熄h)劝{初intp谨;文if(lo延w<h演ig骂h){谅p=p示artit量ion(a感rray,于low,璃high术);抽qsort禾_recu侨rsive双(arra疲y,lo勤w,p挖-1);碑唇qsort裤_recu括rsive案(arra柏y,p饱+1,羽high)钥;感}海}[/co艺de:1:楚1f2a3紧9cc2d抗]掀
需要皆说明一下快段速排序的算畜法:pa垃rtiti东on函数根茧据数组中的牺某一个数把扰数组划分为稿两个部分,贺雹左边的部分睬均不大于这依个数,右边趟的数均不小皆于这个数,史然后再对左慌右两边的数震组再进行划帽分.这富里我们专注启于递归与非姿递归的转换润,part桐ition销函数在非递混归函数中同弯样的可以调泄用(其实帅parti箱tion函殃数就是对当赛前结点的访讽问).面
再次顶进行递归调烂用树和栈的衔分析:检
递归闸调用树:a谈)对当前结组点的访问是列调用par僻titio坦n函数;b化)左子树:奸撑qsort寸_recu免rsive馆(arra瞧y,lo抬w,p恼-1);性c)右子树吗:qsor裂t_rec五ursiv知e(arr丰ay,p趴+1,扣high化);到d)叶子结舞点:当lo跨w<h摧igh时;左e)可以看抵出这是一个蕉先序调用的盖二叉树答
栈:鲁要保存的数冶据是两个表雨示范围的坐钉标.括驳掩[code横:1:1f装2a39c坑c2d]v准oidq挥sort_姑nonre鼠cursi雨ve(in摄tarr佛ay[],硬int狂low,岔inth津igh)疤{掉intm丸[50],掏n[50荷],cp岛,p;
于酱/*初始泼化栈和栈顶蚂指针*/名柏cp=哨0;艰m[0]等=low们;级n[0]俱=hig特h;昏while酱(m[c盏p]<站n[cp]少){浇while剖(m[c雁p]<夹n[cp]绢){/悠*向左走之到尽头*稻/欲p=p辣artit义ion(a什rray,蚁m[cp期],n[便cp]);咬/*对卫当前结点的悦访问*/富聚cp++;榜柿m[cp]违=m[介cp-国1];宾n[cp]燕=p村-1;兔}盾/*向右庭走一步*截/洞m[cp弦+1]节=n[c厦p]+云2;飘n[cp前+1]溪=n[c毙p-1他];绍cp++;与轻}脆}[/co桃de:1:乡1f2a3秆9cc2d亮]昌3)例子三爹搭阿克曼函数角:犹[code锯:1:1f管2a39c顽c2d]a秃km(m,扮n)=戴n+岗1;(m抢=0时线)葛
a桥km(m煌-1,适1);(撕n=0评时)宏
a宣km(m旗-1,碌akm(m允,n-掩1));争(m!蹄=0且n喷!=0录时)[/c犹ode:1蜡:1f2a氏39cc2达d]
芒脚递归算法如忠下:丘[code辰:1:1f肯2a39c男c2d]i观ntak智m_rec涌ursiv范e(int棉m,i惕ntn)夹破{超intt架emp;挠if(m宽==0弓)
相retur唤n(n执+1);晴勒else攻if(n乞==0弓)
争retur较nakm签_recu瓶rsive不(m-挣1,1)妨;斜else周{捞temp敲=akm米_recu纯rsive立(m,n厦-1)注;究retur乏nakm芳_recu后rsive斗(m-漫1,te晶mp);酷}梳}[/co敌de:1:纯1f2a3谅9cc2d屿]话这个例子相玉对难一些,痰不过只要正啄确的分析递雹归调用树和蝇栈的变化情适况就不难解常决,先卖个碧关子,晚上陕再来公布答甜案,感兴趣值的可以先想鲜想.关这个例子相沙对难一些,修不过只要正易确的分析递么归调用树和乓栈的变化情升况就不难解绸决,先卖个妈关子,晚上切再来公布答丹案,感兴趣桥的可以先想楚想.[/q帜uote:孤782a0聋80549冤]悉递归和非递箭归,其实年都是一样的拘.非递归需洲要人为构建罪维护堆栈.勺递归只是系煮统症在帮你维护矩堆栈而已.养数据结构良上说得很清阅楚.用好了,让我丰们回到递归遇与非递归的撕世界中,继扣续未完的旅皆途.诊这道题的难状点就是确定盏递归调用树额的情况,因踩为从akm娇函数的公式耽可以看到,典有三个递归润调用,一般渐买而言,有几菠个递归调用葵就会有几棵江递归调用的劲子树,不过豆这只是一般顷的情况,不垄一定准确,销也不一定非底要腰机械化的这玻么作,因为混通常情况下望我们可以做忘一些优化,探省去其中的睛一些部分,叶这道题就是勺一个例子.老粥
递息归调用树的商分析:a)亡是当m=0兽时是叶子结仓点;b)左夏子树是ak乞m(m-捷1,a户km(m,屠n-绑1))调用帐中的构akm(m崇,n-众1)调用妥,当这个调弹用结束得出弃一个值te会mp时,再赢调用akm零(m-河1,te亲mp),这沫个调用是右升子树拉.c)从上伏面的分析可膨以看出,这疼个递归调用乘树是后序遍杯历的树.榨
栈缠的分析:要号保存的数据暮是m,n想,当n=欠0或凳m=0栗时开始退栈炊,当n=松0时把上抄一层栈的m扰值变为歌m-1补,n变为1畏,当m=本0时把上慈一层栈的m伶值变为0,拌n变为n咬+1.从宝这个分析过僚程可以看出屯,我们省略魄了恢当n=鸭0时的ak幻m(m-掠1,1座)调用,原蹲来在系统机态械化的实现慈递归调用的妥过程中,这娱个调用也是鼓一棵子树,猜泊不过经过分缺析,我们用线修改栈中数轿据的方式进步行了改进.救杯[code吩:1:03咐51fd7调499]i傲ntak逐m_non融recur舅sive(晋intm筹,int戏n)乓{碎intm天1[50]森,n1[椒50],狗cp;立cp=该0;爪m1[0]杜=m;娇粗n1[0]味=n;宵杏do{斩while减(m1[浅cp]>捉0){申
/*炒压栈,直宽到m1[c愚p]=述0*/废while疑(n1[嘱cp]>大0){必
/*及压栈,直冶到n1[c箱p]=爱0*/蔬cp++;字辰m1[cp互]=m钉1[cp浆-1];冻次n1[cp夕]=n芹1[cp淡-1]爷-1;难}扬/*计算喘akm(m捐-1,魂1),当栽n=0盛时*/叙m1[cp刻]=m弊1[cp]帖-1;盖延n1[cp剪]=1洲;扰}纱/*改栈倦顶为akm妙(m-孝1,n勒+1),割当m=刚0时*/克锄cp--;如局m1[cp穴]=m帅1[cp]咽-1;拘无n1[cp秧]=n促1[cp划+1]鸦+1;创}whi纽le(c猎p>0表||m皇1[cp]涝>轻0);端retur机nn1[氧0]+帅1;盼}[/co疫de:1:仿0351f支d7499姐]芝三.递归程钢序的分类及滚用途钟
递归佳程序分为两坛类:尾部递璃归和非尾部尤递归.上面专提到的几个暗例子都是非促尾部递归,遮在一个选择鹅分支中有至赴少砍一个的递归蜘调用.相对绳而言,尾部大递归就容易推很多了,因音为与非尾部劳递归相比,睁每个选择分处支只有一个铅递归调用,顽鄙我们在解决道的时候就不床需要使用到那栈,只要循裤环和设置好振循环体就可添以了.下面怠再举几个尾衬部递归的例客子吧,比较援燕简单我就不危多说什么了侵.械呆1)徐例子一铁立
[c驱ode:1分:785f泥d修53e3e拴]g(m,摩n)=剧0(m苏=0,巨n>=干0)独
=晒g(m-基1,2稠n)+曾n;(m桃>0,案n>=圆0)[/多code:蹈1:785尤fd53e纯3e]
细底
a)轮递归程序脱暴[code李:1:78乒5fd53购e3e]i倡ntg_驾recur怒sive(旱intm脾,int细n)匆{甘if(m将==0袍&&n堪>=0懂)
咏retur昼n0;爬retur僚n(g_于recur贫se(m占-1,鄙2*n)趁+n);凳明}[/co赏de:1:谦785fd修53e3e录]坛宿
b)莫非递归程序仔冰[code卧:1:78帅5fd53垄e3e]i吴ntg_娘nonre裂cursi冰ve(in旦tm,鬼intn倡)物{向intp奥;雁for(紫p=0土;m>脂0&&摸n>=承0;m锋--,n支*=2编)
液p+=羽n;疑retur窑np;俭}[/co岩de:1:参785fd刚53e3e竞]给
2粉)例子二皆
[c颠ode:1盏:785f展d53e3岗e]f(闪n)=按n+1锡
(n企=0)奖岩伐n*摘f(n/2带)(n主>0)[罪/code确:1:78吨5fd53左e3e]
坏闲
a诸)递归程序朗炸[code番:1:78棚5fd53烘e3e]i腔ntf_班recur锋sive(茶intn屯)始{皆if(n贡==0仪)
鹊retur盖n1;刑retur透n(n转*f_r激ecurs耻e(n/2犹));艰}[/co裙de:1:笛785fd卷53e3e拘]鼻
b辰)非递归程恩序陪[code燥:1:78皮5fd53掀e3e]i示ntf_孤nonre波cursi侍ve(in第tn)喷{榆intm梁;睬for(突m=1灰;n>聋0;n聚/=2铃)
滔m*=王n;股retur巨nm++风;宿}[/co跑de:1:浪785fd抵53e3e楚]
赶旁分析完了伯递归程序的桨分类,让我特们回头看看尺在向非递归两转换的过程州中用到了什踪么来实现转态换:锻
1)揪循环,因为展程序要在某框个条件下一绘直执行下去乎,要代替递刺归程序,循三环必不可少衔,对于尾部傻递归,循环史结束的伴案条件十分容贤易确定,只友要按照不同躁分支的条件给写出来就可宴以了.而对桃于非尾部递滴归程序,循絮环结束的条馒件一况勺般是当栈为友空时或者是煌结束了对递肯归调用树的近遍历从树的愁根结点退出淘时,而且有迅的时候写成陡while坚()的形式俗猾博,有时写成司do..鞋.whil菜e的形式(浆如上面的a菜km函数)料,具体怎样索,很难说清晕楚,取决于睬你对整个递眠归程序的分室析敌滤.重
2)帽递归调用树练,树的结构竟在转换的过阴程中是不可强见的,你不悼必为转换专觉门写一个树棋结构,不过浇能不能把递岗归调用够瓦中的树遍历益方式以及叶驳子结点,左缸子树,右子踢树等元素确槐定好是你能约否正确解决艘问题的关键膜(这一点已牲经在败仔上面的分析者过程中展露列无疑),确营定好这些后域,剩下的工储作大部分就悲是按照给出给的几种不同岂的遍历树的目方式君洒把程序进行计改写,这个掀过程就考验胆你对树结构汇还有遍历方眼式是否很好雄的掌握了(戚看出基础的晕重要了吗?玩如果棵踏回答是,那善么和我一样画好好的打好妥基础吧,一该切都还不晚诸!!).对任于尾部递归菊而言,可以菌看作没有递阶归调用树,支墓孕所以尾部递呆归的难度大忌大降低了.费恨
3)歼栈,非尾部受调用中需要强栈来保存数见据,这一点掏已经很清楚楚了,需要注螺意几个问题耻:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 总经理2022工作报告
- 会员玩法策划方案
- 2025秋五年级上册语文-【17 松鼠】双减作业设计课件
- 2025年无线ADSL网关行业深度研究分析报告
- 天气变化英文介绍课件
- 音乐线上课程方案模板
- 后帮胶项目投资可行性研究分析报告(2024-2030版)
- 2025年血型测定实验报告
- 天安门课件教学课件
- 2025年中国电液调速器行业市场前景预测及投资价值评估分析报告
- 三年级下学期音乐复习题
- 农网配电营业工复习题
- 电气毕业论文-基于-plc自动门控制设计
- 炼钢厂风险分级管控清单连铸区域
- 新时期农村初中语文教学中渗透心理健康教育的研究 论文
- 女性中医保健智慧树知到答案章节测试2023年暨南大学
- 餐饮员工入职登记表
- GA 1808-2022军工单位反恐怖防范要求
- -卫生资格-副高-护理学-副高-章节练习-专科护理学-内科疾病患者护理(多选题)(共42题)
- 一带一路 匠心织竹-计划书
- Unit 1 Extended reading Eating in China 公开课-高中英语牛津译林版(2020)选择性必修第一册
评论
0/150
提交评论