博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于递归的初级理解
阅读量:5138 次
发布时间:2019-06-13

本文共 1642 字,大约阅读时间需要 5 分钟。

我觉得一开始理解递归是比较难的,特别是我们会习惯性的会将递归进行分解,当然这个也没有错,这会有助于我们去理解递归。

但是我觉得网上恶心的是什么呢?他们只会留下这么简单的一句:

要理解递归,请理解递归。

这句话谁都懂,对递归的概念其实大多数人也懂,但难懂的是如何去学会理解并使用递归。

于是我将我对递归中的一部分理解心得供大家慢慢参考。

本文将举出三个基本例子,这样也是一层一层的深入。

第一个例子是求阶乘,作为递归思维的饭前甜点

public class jiecheng {        public static int  jiecheng(int n) {        if(n!=0) {        return n*jiecheng(n-1);//在这里运用到了递归        }else {//当n=0时,就跳转到这里,直接结束            return 1;        }    }    public static void main(String args[]) {        int n=5;//求n的阶乘        System.out.println(jiecheng(n));    }}

我将调用的路径写一下

return 5*(return 4*(return 3*(return 2*(return 1*return(因为此时n=0,所以返回1) ) ) ) )=5*4*3*2*1*1;

现在大家是不是一目了然了,这是层层调用,最后止步于n=0,再层层返回

第二个例子是快速排序,快速排序我们经常用到,而且也是调用递归的一个典型例子

public class QuickSort {    public static void quickSort(int s[],int low,int high) {        if(low>high) {            return;        }        int i=low,j=high;        int key=s[low];//这里作为基准元素        while(i
=s[i]) { i++;//同理从低位开始扫描,如果发现有低位存在比基准值高的,则跳出循环 } s[j]=s[i];//将该值赋给刚刚的高位扫描处,相当于围绕key进行了一个置换 }//最终,所有的值均围绕key值的大小排在了两边,显然,此时的i在值的中间位置,而不是空间上的中间位置,且此时i==j s[i]=key;//这个很重要,因为在第一次扫描后,是s[i]=s[j],时,s[i]的值已经更改,而是s[i]的初始值是s[i]=s[low]=key;所以在这一步进行还原 quickSort(s, low, i-1);//此处开始递归,将在下面进行解释 quickSort(s, j+1, high); } public static void main(String args[]) { int s[]= {4,6,9,2,7,5,0,8,3,1}; quickSort(s, 0, s.length-1); for(int i=0;i

如果有什么代码思路上的不懂(除了递归思路在下面解释),可以看注释,写得很详细

快速排序中的递归其实就相当于一个深度二叉树,找到叶子而叶子就是key为止,比如最先找到的是返回是是s[0]=4,然后找到key的顺序是1,0,2,3,5,6,7,8,9,实际上快排就是查找一个key的过程

转载于:https://www.cnblogs.com/gambler/p/8727298.html

你可能感兴趣的文章
九校联考-DL24凉心模拟Day2T1 锻造(forging)
查看>>
Cortex M3/M4 学习摘要(二)
查看>>
C#时间的味道——任时光匆匆我只在乎你
查看>>
(1)数据结构——线性表(数组)实现
查看>>
SpringMyBatis解析2-SqlSessionFactoryBean
查看>>
按照excel文档中的内容在当前cad图纸中自动排布实体
查看>>
Winform开发框架之图表报表在线设计器2-图表-SNF.EasyQuery项目--SNF快速开发平台3.3-Spring.Net.Framework...
查看>>
C#基础第八天-作业-设计类-面向对象方式实现两个帐户之间转账
查看>>
洛谷 P3237 [HNOI2014]米特运输
查看>>
Attributes.Add用途与用法
查看>>
JavaScript面向对象初探——封装和继承
查看>>
L2-001 紧急救援 (dijkstra+dfs回溯路径)
查看>>
【概率】poj 2096:Collecting Bugs
查看>>
javascript 无限分类
查看>>
【自制插件】MMD4Maya
查看>>
解决linux服务器乱码
查看>>
mapbox.gl文字标注算法基本介绍
查看>>
【C++】异常简述(二):C++的异常处理机制
查看>>
web.config在哪里
查看>>
SQL Server 2000 版本支持的最大物理内存量
查看>>