递归基础思想

有个朋友刚刚在学习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来接近终止数字(✔️)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据文摘

视觉直观感受 7 种常用排序算法

1795
来自专栏King_3的技术专栏

leetcode-202-Happy Number

3007
来自专栏用户2442861的专栏

白话经典算法系列之六 快速排序 快速搞定

原文   http://blog.csdn.net/morewindows/article/details/6684558

912
来自专栏决胜机器学习

PHP数据结构(五) ——数组的压缩与转置

PHP数据结构(五)——数组的压缩与转置 (原创内容,转载请注明来源,谢谢) 1、数组可以看作是多个线性表组成的数据结构,二维数组可以有两种存储方式:一种是以行...

34611
来自专栏Python小屋

图解Python 3.x多继承时方法解析顺序MRO

在Python 3.x的多继承树中,如果在中间层某类有向上一层解析的迹象,则会先把本层右侧的其他类方法解析完,然后从本层最后一个解析的类方法中直接进入上一层并继...

843
来自专栏偏前端工程师的驿站

JS魔法堂:彻底理解0.1 + 0.2 === 0.30000000000000004的背后

Brief                                 一天有个朋友问我“JS中计算0.7 * 180怎么会等于125.9999999999...

2026
来自专栏CSDN技术头条

算法入门,其实可以像读小说一样有趣

我琢磨着目录,心想终于要把这些主题搞明白了。但那本书深奥难懂,看了几周后我就放弃了。直到遇到一位优秀的算法教授后,我才认识到这些概念是多么地简单而优雅。

4064
来自专栏C语言及其他语言

【编程经验】优秀题解

1) 第一种思路很简单,在全局定义一个大数组,所有元素初始为0,每输入一个数时,就在以这个数为数组下标的元素加一,最后输出结果。

763
来自专栏王小雷

Python之数据规整化:清理、转换、合并、重塑

Python之数据规整化:清理、转换、合并、重塑 1. 合并数据集 pandas.merge可根据一个或者多个不同DataFrame中的行连接起来。 panda...

2036
来自专栏King_3的技术专栏

leetcode-506-Relative Ranks

1397

扫码关注云+社区