根据运行的环境,操作系统可以分为桌面操作系统,手机操作系统,服务器操作系统,嵌入式操作系统等。
递归和迭代 学习技术之路还有很长的路要走 首先,我们查询百度百科的定义. 是指由功能,过程,子例程直接或间接在运行的程序中调用自身引起的重入现象. 在计算机编程中,递归指的是一个过程: 一个函数不断地对其自身进行引用,直到知道所引用的对象为止. 重复反馈过程的活动通常旨在达到所需的目标或结果. 该过程的每次迭代都称为“迭代”,并且每次迭代的结果都将用作下一次迭代的初始值. 感谢您的定义,这令人头痛吗?阅读后,它看起来似乎可以理解但不是很容易理解吗? 接下来,让我们一起了解递归和迭代. 递归图片 递归: 从问题开始,即从顶层开始,深入最简单的问题(底层解决方案),获得答案,如果完成,则提交,如果尚未完成,请返回再次使用上一层,使用底层解决上层问题,然后逐层返回顶层. 它既关注当前状态,也关注先前的状态,并且不知道其将来的状态是否正在运行,但是必须返回到先前的状态. 示例: 给数字100,然后从1到100求和. 如果您想递归解决问题:
static int recursion(int i){ if(i == 1 || i == 2){ 返回1; } 其他{ 返回递归(i-1)+递归(i-2); //第三项等于最后两项的总和 } } 有无数经典的递归算法,例如各种二叉树方法. 虽然它可以减少代码量,但它也带给人们找到退出的乐趣递归和迭代的区别,但是它也占用了大量内存,并且还会导致运行时间增加. 较差的递归算法对计算机造成的后果更加困难. 阅读递归后,您渴望看到迭代吗? Jacobi迭代算法 迭代: 从最简单的问题开始,形成答案后,比较需求是否已完全迭代,如果没有,则继续迭代直到找到解决方案. 在此过程中,有一个新的解决方案可以覆盖旧的解决方案. 直接覆盖意味着它仅关注当前状态,而不返回或影响先前或将来的状态. 它只会产生当前结果,并返回最终结果,直到迭代结束. 插图: 欧几里得算法(a和b的最大公约数= a和mod b的最大公约数): / *旋转相分方法* / public static int gcd_2(int a,int b){ 如果(a <0 ||="" b="">0><0) *防止错误*="">0)> 返回0; int temp; / * b始终代表较小的数字,如果不是,则交换a,b的值* / 同时(b> 0){ temp = a%b; a = b; b =温度; } 返回a; } 斐波纳契数列: / *斐波那契数列* / public static int fibonacci(int n){ 如果(n <> 返回0; if(n == 1 || n == 2)/ *特殊值不迭代* / 返回1; int f1 = 1,f2 = 1,fn = 0; / *迭代变量* / int i; for(i = 3; i <= n;="" i="" ++){/="" *使用i的值限制迭代次数*="">=> fn = f1 + f2; f1 = f2; // f1和f2向前迭代递归和迭代的区别,其中f2在f1前面 f2 = fn; } 返回fn; } 摘要: 两者之间的区别在于您自称自己并用新的替换旧的. 也可以说这没有什么区别,因为根本没有人. 现在,两者的主要概念不在同一个领域,而第二个也有部分相交,都是为了找到出口并获得解决方案. 递归: 给自己打电话,一步一步地找到出口,而出口可能不是解决方案. 迭代: 用新的替换旧的,导出必须是解决方案.
|
温馨提示:喜欢本站的话,请收藏一下本站!