递归模型由什么组成(什么是递归算法?递归算法的特性?),本文通过数据整理汇集了递归模型由什么组成(什么是递归算法?递归算法的特性?)相关信息,下面一起看看。
想必有很多小伙伴想多了解一下什么是递归算法,所以今天小豪边肖为大家收集了一些关于什么是递归算法的知识点。
想必有很多朋友想多了解一下什么是递归算法。所以今天,小豪边肖收集了一些关于递归算法的知识,与大家分享。我希望你会喜欢它。递归算法是一种聪明但昂贵的算法,其中函数通过重复调用自己来获得最终结果。
例如:
汉诺塔的递归算法:
道的版权归果芝答案网站或原版权人所有。
无效移动(字符x,字符y){
要心胸开阔,思想开放。没有公清风,采矿技术特殊。
printf(%c - %cn ,x,y);
}
void hanoi(int n,char 1,char 2,char 3){
if(n==1) move(一,三);
否则{
河内(n-1,一,三,二);
动(一,三);
河内(n-1,二,一,三);
你是先被压的,但是你不能让它变红。
}
}
main(){
int n;
printf(输入磁盘数量:);
scanf(%d ,n);
printf(移动的步骤=disks:n ,n);
hanoi(n, A , B , C );
}
我来说说对递归的理解。
首先,对于递归这样的函数,不用管它是做什么的,只要知道它的一个模糊函数是什么就行了,这就相当于把他想象成一个可以实现某个功能的黑盒,而不管它的内部运算。首先,好,我们来看看河内塔是怎么解决的。
首先我上面说过,把递归函数想象成某个函数的黑盒,void Hanoi (int n,charone,chartwo,charthree);这个递归函数的作用是:从小到大放置的N个小矩形可以通过两个位置从一个位置移动到三个位置。那么你的主程序要解决的问题就是借助B把M个‘河内分块’从A移到C,根据上面说的河内塔的功能,我相信傻子也知道,在主函数里写:hanoi(m,A,B,C)可以借助B代码实现M个分块从A到C的转移吧?所以主函数中有河内(m, A , C , B );这通电话。
接下来我们来看看hannoi函数要怎么做才能实现hannoi的这个功能。
hannoi函数中有三行。
河内(n-1,一,三,二);
动(一,三);
河内(n-1,二,一,三);
用黑盒一样的方式看他,如果你想通过B把N个方块从A移动到C,可以分成上面三步吗?
这三个部分是:第一步是将n-1块除了最后一个最长的块从一个位置移动到两个位置经过三个,也就是从A移动到C,然后用move函数直接将最低最长的块从A移动到C。之后的第三步是借助hannoi函数将刚刚的n-1块从B移动到C,分三步练习N块从A到B到C的函数。同样,你也不用担心hanoi函数是如何实现这个功能的。
最后:递归是有结局的吧?结局就是只有一块的时候。河内塔怎么玩?很简单。只要把那块有A的移到C,就大功告成了。所以,如果(n==1)move(one,three)是加在末尾的hanoni的函数;(只有一个块的时候,直接A移动A到C就可以了。)这样的条件可以实现当哈诺因函数n=1时,将N个块从A经B移动到C的完整功能。
这个复杂的递归思想就这样简单地解决了。呵呵,不知道你懂不懂?纯手工打字,希望能帮助你理解递归。
综上所述,只要忽略递归的具体步骤,只要知道它的函数是什么,然后用自己的函数通过调用自己来求解自己的函数(容易绕口,天)。最后添加一个限制条件,比如上面提到的那个。
本文到此结束,希望对你有所帮助。
标签:
声明:本文由用户上传。如有侵权,请联系删除!
更多递归模型由什么组成(什么是递归算法?递归算法的特性?)相关信息请关注本站,本文仅仅做为展示!