
文章目录阅读这篇文章就证明你已经开始踏上了算法的修仙之路,接下来我会两天一更,介绍图解算法里面的算法的实现, 适合Java程序员阅读。
- 前言
- 一、使用工具
- 二、分析循环和递归的优缺点
- 一. 递归
- 二. 循环
- 三、栈的理解
- 一. 提出问题
- 二. 分析问题
- 三. 解决问题
- 四、递归的实现
- 一. 初识递归
- 二. 递归进阶
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
例如:需要掌握一种简单的数据结构–栈, 当然不了解也能理解递归,但是最好了解栈的原理,甚至用自己熟悉的编程语言实现栈。
提示:以下是本篇文章正文内容,下面案例可供参考
记笔记:用Typora, 个人觉得做笔记用这个够用了,一定要学会的技能
写代码:idea 社区版 或者其他也行,不影响学习算法
将一个问题, 能够细分若干个相同的问题处理, 比如开盲盒子,
你并不知道哪一个盒子里面有东西, 但是你能把它细分为打开
盒子这个步骤。
递归的优点:程序能更加容易理解
递归的缺点:
程序的性能可能没有循环高,
容易进入死循环,需要引入
基线条件和递归条件概念
递归条件: 函数本身调用函数本身
基线条件: 就是结束调用的条件
二. 循环
循环的优点: 程序的性能高
循环的缺点: 程序可能不那么容易理解, 没有将问题细分很多小块去实现
三、栈的理解
栈是一种简单的数据结构,递归中所涉及到 *** 作有压栈,d栈。
栈的 *** 作原则: 先进后出
栈在 *** 作系统和内存中运用非常广泛,一定要掌握。
一. 提出问题
二. 分析问题
三. 解决问题
代码实现
public class Demo {
public static void main(String[] args) {
//函数调用的顺序
greet("A");
}
public static void greet(String name){
greet2("B");
System.out.println("Hello " + name);
}
private static void greet2(String name) {
System.out.println("Hello " + name);
}
}
结果
总结
分析过程:
先调用了greet函数, 将其放入内存中,
greet函数中又调用了greet2函数,
又将其放入到内存中, 内存的结构使用的是栈结构,
greet2函数执行,greet被挂起,greet再执行。
如果你掌握了这个,那么栈的 *** 作原则你也能理解了。
四、递归的实现
一. 初识递归
问题
打印1~5的数字(用递归实现)
public class Demo {
public static void main(String[] args) {
//递归的一个示范例子
countDown(5);
}
public static int countDown(int n){
System.out.println(n);
if(n <= 1){ //基线条件
return 0;
}
return countDown(n-1); //递归条件
}
}
结果
问题
求 5!
public class Demo {
public static void main(String[] args) {
//求5的阶层
int result = fact(5);
System.out.println("5! = " + result);
}
public static int fact(int n) {
if(n == 1){ //基线条件: 递归结束的条件
return 1;
}
return n * fact(n-1); //递归条件: 自己调用自己
}
}
结果
递归是一种思想,比如后面学习快速排序的时候,也需要使用到递归,所有
打下良好的基础是非常重要的
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)