zoukankan      html  css  js  c++  java
  • 递归基础思想

    有个朋友刚刚在学习java,刚学了一个月,他虽然脑袋很大(不是针对所有人,只是针对他),但是说自己总是在解题的时候找不到思路。他在学习时遇到了几道关于递归的小题,今天简单聊一下关于递归的思路。

    上面是朋友发过来的图片,就这几道题简单谈一下递归从哪里入手。

    先介绍一下递归,百度百科是这样解释的:程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

    从上面的话我们可以看出,递归其实就是将大的问题分解成小的问题,并且这个子问题的解决方法和大问题的解决方法一样。

    其中必须满足以下条件:
    1.必要条件必须要有终止条件
    2.子问题要更接近终止条件

    以上图第一个例子说明一下:

    编写代码,完成1+2+3+4+...+100输出结果:

    这里以1加到5为例子

    public static void main(String args[]) {
            System.out.println(result(5));
        }
    
        public static int result(int i){
            int sum;
            if (i == 1) return 1;
            else
                sum = i + result(i - 1);
                System.out.println("i是:"+i+"------sum是:"+sum);
            return sum;
        }
    

    从代码来看是这样一个调用过程:

    result(5)
    5+result(4)
    5+(4+result(3))
    5+(4+(3+result(2)))
    5+(4+(3+(2+result(1))))
    

    展开成数字来看:

    (5+(4+(3+(2+(1)))))
    (5+(4+(3+(2+1))))
    (5+(4+(3+3)))
    (5+(4+6))
    (5+10)
    

    这时我们在回头看递归的满足条件:
    条件一:终止数字1(✔️)
    条件二:每次减1来接近终止数字(✔️)

  • 相关阅读:
    [MFC]CImageList仅显示黑色的问题
    [hessdroid]Android下使用Hessian与Java服务端通讯的传值测试
    [MFC]Sqlite问题小记
    [MFC] FTP 遍历服务器目录文件卡住的问题
    ExtJs 备忘录(9)—— Ext常用属性、方法小结 [系列完]
    [MFC]托盘图标删除后不自动消失的问题
    RIL接听电话没有声音的问题 [ RIL_Answer | RIL_SetAudioDevices ]
    [Qt]Qt Creator汉化方法
    [C++]遍历可变参数 (va_list)
    [杀毒]删除U盘autorun.inf
  • 原文地址:https://www.cnblogs.com/dalaoyang/p/8986742.html
Copyright © 2011-2022 走看看