递归基础思想

有个朋友刚刚在学习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 条评论
登录 后参与评论

相关文章

来自专栏鸿的学习笔记

两个字符串算法

这部分主要使用了动态规划的技术,就是如果两个最大公共子序列相等的话,必然前面的也相等

412
来自专栏fangyangcoder

算法导论中的四种基本排序

                                                        by方阳

972
来自专栏算法channel

不基于比较的基数排序原理图解

主要推送关于对算法的思考以及应用的消息。坚信学会如何思考一个算法比单纯地掌握100个知识点重要100倍。本着严谨和准确的态度,目标是撰写实用和启发性的文章,欢迎...

39113
来自专栏take time, save time

你所能用到的数据结构(五)

七、骚年,这就是你的终极速度了吗? 在介绍了前面的几个排序算法之后,这一次我准备写写快速排序,快速排序之所以叫快速排序是因为它很快,它是已知实践中最快的排序算...

2745
来自专栏编程之旅

唠唠快速排序算法

每一个从事计算机相关方向工作的同学一定听说过快速排序算法,在面试的准备过程中,快排也一定是一个必须要牢牢掌握的算法。那么今天就来唠唠快速排序算法。

842
来自专栏小樱的经验随笔

HUST 1586 数字排列

1586 - 数字排列 时间限制:1秒 内存限制:128兆 91 次提交 36 次通过 题目描述现有n个k位的数字,你的任务是重新安排数字每一位的位置,使得...

27812
来自专栏HTML5学堂

原生JS | 当兔子遇到鸡

HTML5学堂-码匠:当兔子遇到鸡,会怎样呢?先别急,看个小视频~ 视频内容 当兔子遇到鸡 —— 不要害怕和别人不一样,在这个世界上,你就是独一无二的自己! 不...

38410
来自专栏Python小屋

Python模拟大整数乘法的小学竖式计算过程

让我们先看个图回顾一下小学学过的计算整数乘法的竖式计算过程 ? 然后再来看如何使用Python来模拟上面的过程,虽然在Python中计算任意大的数字乘法都没有问...

2935
来自专栏北京马哥教育

史上最简单!冒泡、选择排序的Python实现及算法优化详解

1、排序概念 内部排序和外部排序 根据排序过程中,待排序的数据是否全部被放在内存中,分为两大类: 内部排序:指的是待排序的数据存放在计算机内存中进行的排序过程;...

4614
来自专栏C/C++基础

打印1到最大的n位数

这道题是面试过可能会遇到的手写代码题。如n为3时,那么需要打印1到999。需要注意的是当输入的n很大时,最大的n位数是不能通过int或者long long in...

581

扫码关注云+社区