关于递归和迭代[通俗易懂]

关于递归和迭代[通俗易懂]首先明确递归和迭代的概念。递归:程序调用自身的编程技巧(将大问题化解为相同结构的小问题,从待解问题一直分解到已知答案的最小问题,在逐级返回得      到原解)    使用递归的两个阶段:    1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;    2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.迭代:从已知式出发

大家好,又见面了,我是你们的朋友全栈君。

首先明确递归和迭代的概念。

递归:程序调用自身的编程技巧(将大问题化解为相同结构的小问题,从待解问题一直分解到已知答案的最小问题,在逐级返回得            到原解)

        使用递归的两个阶段:

       1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;

       2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.

迭代:从已知式出发,通过递推式,不断更新变量到解决问题。

从思想上来说,迭代是人,递归是神!迭代是人,递归是神

从实现上来说,能用迭代就不用递归(递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出

下面以剑指offer题为例,给出几个个人感觉实现比较好的迭代。

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

分析:(递归方式分析得思路 —>迭代方式写代码)

public class Solution {
            public int JumpFloorII(int target) {
            //递归的思想快速分析问题得到思路
                if (target <= 0) {
                    return -1;
                } else if (target == 1) {
                    return 1;
                } else {
                    return 2 * JumpFloorII(target - 1);
                }
            }
        }


 f(N) = f(N-1)+
f(N-2)+
f(N-3)+…….
+f(1)+1                  (1)

        = 2^(n-1)                                                            (2)

代码1:

public class Solution {
            public int JumpFloorII(int target) {
                if(target == 0) {
                    return 0;
                }
                //该方法通过数组的形式完成1式的累加,并将每一项都保存起来。
                int[] dp = new int[target + 1];
                dp[0] = 1;
                dp[1] = 1;

                for(int i = 2;i <= target;i++) {
                    dp[i] = 0;
                    for(int j = 0;j < i;j++) {
                        dp[i] += dp[j];
                    }
                }

                return dp[target];
            }
        }

代码2 :

public class Solution {
            public int JumpFloorII(int target) {
                //该方法实现2式的累乘
                int t =1;
                if(target == 0){
                    return 0;
                }else if(target ==1){
                    return 1;
                }else {
                    for(;target-1>0;target--)
                        t = 2*t;
                }
                return t;
            }
        }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134927.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 静态页面和动态页面的区别在于_超链接属于静态网页还是动态网页

    静态页面和动态页面的区别在于_超链接属于静态网页还是动态网页什么是静态页面?什么是动态页面?两者有什么区别?很多不了解前端技术的人可能会认为静态页面就是一个内容固定不变,没有任何效果的页面,而动态页面则是页面非常丰富,有各种交互效果和动态效果的页面。其实这个理解是错误的。通过本篇文章的阅读,详细为大家分享一下静态页面和动态页面到底是什么,两者有什么区别。什么是静态页面和动态页面?  通俗的来讲,静态页面是随着HTML代码的生成,页面的内容和显示效果就基本不会发生变化(除非修改页面代码),而动态页面,虽然同样页面代码不发生变化,但是其显示的内容确实可以随着时间环

    2025年8月14日
    4
  • maven引入包不完全问题

    maven引入包不完全问题

    2020年11月9日
    180
  • cefsharp设置cookie_CefSharp 设置cookie

    cefsharp设置cookie_CefSharp 设置cookie设置cookievarcookieManager=CefSharp.Cef.GetGlobalCookieManager();awaitcookieManager.SetCookieAsync(“http://”+domain,newCefSharp.Cookie({Domain=domain,Name=name,Value=value,Expires=DateTi…

    2026年1月25日
    3
  • RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)[通俗易懂]

    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)[通俗易懂]RapeLay(电车之狼R)的结局介绍(隐藏结局)必备知识要让MM怀孕非常easy.起初刚进入调教模式后.仅仅要H一次MM就開始有时期状态.生理(连上有红晕)->不详状态(闭目第一次)-

    2022年7月3日
    107
  • 命令行分析java线程CPU占用

    命令行分析java线程CPU占用

    2022年1月30日
    59
  • JavaScript Scripting.FileSystemObject FSO属性大全

    JavaScript Scripting.FileSystemObject FSO属性大全
    什么是FSO?
    FSO即FileSystemObject文件系统对象,是一种列表Windows磁盘目录和文件,对目录和文件进行删除、新建、复制、剪切、移动等操作的技术。使用FSO网站的好处:直接读取目录下的文件和子目录,方便维护,如需要添加任何内容,将文件放在相应的目录下即可;FSO网站类似Windows操作界面,易于使用,会使用Windows就会使用FSO网站。
    试想一下,很方便的就可以将您硬盘中的文件和文件夹制作成网站,并且日后只要把内

    2022年7月14日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号