常用数据结构已更新完毕
数据结构01 数据结构概述
https://www.kuangstudy.com/bbs/1399692979765055489
数据结构02 数组(变长),数组对象,数组操作
https://www.kuangstudy.com/bbs/1400646624300044289
数据结构03 栈 / 队列 /数组查找算法
https://www.kuangstudy.com/bbs/1401082922496270337
数据结构04 链表/循环链表/双向链表
https://www.kuangstudy.com/bbs/1401525268316790786
递归
递归简介
程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
简单实现和 解决斐波那契数列
simple
public static void simpleRe(int i){
if (i>0){
System.out.println(i);
simpleRe(i-1);
}
}
运行
public static void main(String[] args) {
simpleRe(3);
}
答案
3
2
1
斐波那契数列
public static int f(int i){
if (i==1 || i==2){
return 1;
}
else return f(i-1)+f(i-2);
}
汉诺塔问题
public static void h(int n ,String from,String in,String to){
if (n==1){
System.out.println("第1个盘子"+from+"到"+to);
}else {
//把其他所有盘移到中间
h(n-1,from,to,in);
//把最后一个盘子移动到目标位置
System.out.println("第"+n+"个盘子"+from+"到"+to);
//把上面盘子移动到目标位置
h(n-1,in,from,to);
}
}
时间复杂度和空间复杂度
比较效率是取出常数项
计算时间复杂度
T(n)=n2+5n+6与T(n)=3n2+3n+2 O(n)都为n的平法
空间复杂都一般不计算 ,空间复杂度就是占的内存