斐波那契数列

定义:

  • 斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........,这个数列从第3项开始,每一项都等于前两项之和。
  • 斐波那契数列又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。

代码:

import org.junit.jupiter.api.Test;/*** 斐波那契数列* @author wydream**/public class Algorithm_1 {/*** 用递归实现斐波那契数列,适用于求解比较小的位置数值* 0 1 1 2 3 5 8 13 21...* @param n* @return*/public int getNum(int n) {if(n<=2) {return 1;}else {return getNum(n-1)+getNum(n-2);}}@Testpublic void test() {System.out.println(getNum(6));}}

求阶乘

import org.junit.jupiter.api.Test;public class Algorithm_2 {public int getSum(int n) {//当n=1时,直接返回if(n==1) {System.out.print(n + "=");return n;}else {//n>1时,递归调用getSum方法,求出n*n-1的结果System.out.print(n + "*");return n*getSum(n-1); }}@Testpublic void test() {System.out.println(getSum(4));}}

列出某个目录下所有子目录和文件

import java.io.File;import org.junit.jupiter.api.Test;/*** 列出某个目录下所有子目录和文件* @author wydream**/public class Algorithm_3 {public void getDir(String path) throws Exception{File file=new File(path);if(file.isDirectory()) {System.out.println("Dir --" + file.getPath());File[] fileArr=file.listFiles();for(File f:fileArr) {getDir(f.getPath());}}else if(file.isFile()) {System.out.println("File--"+file.getPath());}else {throw new Exception(file.getPath());  }}@Testpublic void test()throws Exception {getDir("D:\\software\\JavaSoft\\eclipse\\eclipse");//这里的目录换成你自己电脑上的目录即可}
}

汉诺塔问题

定义:

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

代码:

import org.junit.jupiter.api.Test;/*** 汉诺塔问题* @author wydream**/public class Algorithm_4 {private final static String FROM="柱子A";private final static String MID="柱子B";private final static String TO="柱子C";/*** 汉诺塔* func:* if n!=0 then          ;预定值* func(n-1, a, c, b)    ;将n-1个盘子由a移动到b,以c为辅助柱子(注意参数顺序)* move a[n] to c        ;将a上的最后一个盘子移动到c* func(n-1, b, a, c)    ;将n-1个盘子由b移动到c,以a为辅助柱子* endif                 ;完成*/public void move(int n,String from,String mid,String to) {if(n==1) {System.out.println("移动盘子 " + n + " 从 " + from + " 到 " + to);}else {move(n-1,from,to,mid);System.out.println("移动盘子 " + n + " 从 " + from + " 到 " + to);move(n-1,mid,from,to);}}@Testpublic void test() {move(3,FROM,MID,TO);}}

二分法查找

概念:

二分法查找,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。

二分法查找的思路如下:

(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。

(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。

(3)如果某一步数组为空,则表示找不到目标元素。

代码:

import org.junit.jupiter.api.Test;/***  * 二分法查找值* 一定是有序表,升序降序都可以* 原理就是找中间值** @author wydream**/public class Algorithm_5 {public int search(int []array,int start,int end ,int searchValue) {if(array!=null&&array.length>0) {int middle=(start+end)/2;int middleValue=array[middle];if(searchValue==middleValue) {return middle;}else if(searchValue<middleValue){//查询值小于中值,在中值前面再次搜索,缩小范围return search(array,start,middle-1,searchValue);}else {//查询值大于中值,在中值后面再次搜索,缩小范围return search(array,middle+1,end,searchValue);}}else {return -1;}}@Testpublic void test() {int[] arr= {2,3,6,9,13,18,20,22,24,29,30,45,67,88};System.out.println(search(arr, 0, arr.length-1, 20));}}

算法——递归算详细总结相关推荐

  1. 负荷分配问题的动态规划算法递归实现

    本文是参加工作之初,研究水电站优化运行时所写,已成为遥远的过去了.记得当时好像是要投下稿,所以煞有介事的写了中英文摘要.学生时代曾经研究过用演化类算法求解负荷分配问题,那是刻意往"新&quo ...

  2. 多目标柔性车间调度丨mogv算法:以算例MK01为例

    车间调度系列文章: 1.车间调度的编码.解码,调度方案可视化的探讨 2.多目标优化:浅谈pareto寻优和非支配排序遗传算法-NSGAII的非支配排序及拥挤度 3.柔性车间调度问题:以算例MK01初探 ...

  3. 垃圾收集概述和垃圾收集算法(超详细介绍)

    文章目录 垃圾收集概述和垃圾收集算法(超详细介绍) 为什么我们还要去了解垃圾收集和内存分配 哪些内存需要回收 不需要回收的 需要回收的 方法区的回收 回收废弃常量 回收"不再被使用的类&qu ...

  4. 机器学习【期末复习总结】——知识点和算法例题(详细整理)

    机器学习[期末复习总结]--知识点和算法例题(详细整理) 1.什么是机器学习,什么是训练集,验证集和测试集?(摘自ML科普系列(一)) 机器学习: 对计算机一部分数据进行学习,然后对另外一些数据进行预 ...

  5. 排序算法 快速排序【详细步骤图解】

    排序算法 快速排序[详细步骤图解] 快速排序 主要思想 图解 第一轮分割序列 第二轮分割序列 --- 左子序列 小结 第三轮分割序列 --- 右子序列 C++实现 总结 快速排序 给定一个序列:22 ...

  6. 【算法】超详细的遗传算法(Genetic Algorithm)解析

    转自:https://www.jianshu.com/p/ae5157c26af9 [算法]超详细的遗传算法(Genetic Algorithm)解析 00 目录 遗传算法定义 生物学术语 问题导入 ...

  7. 魔域私服服务器连接中断,魔域私服服务器中装备武器道具爆率相关算法及设置详细攻略分享...

    想必很多魔域私服玩家都比较好奇在游戏中各个高级怪物或者boss怪物的装备武器爆率是多少,其实这个问题不单单是玩家想要知道很多魔域私服gm也是非常想要知道的.在游戏里装备武器爆率绝对不是直接用一个百分比 ...

  8. A*算法(超级详细讲解,附有举例的详细手写步骤)

    背景:项目需要接触此算法,以下是一些自学成果,如有不足之处,欢迎指出,必虚心接受.做了一份PPT来汇报,此处直接使用自己PPT的截图.部分图片来源网络,如有侵权立马删除,以下博文仅作为学习笔记.后期又 ...

  9. 数据挖掘领域十大经典算法之—AdaBoost算法(超详细附代码)

    相关文章: 数据挖掘领域十大经典算法之-C4.5算法(超详细附代码) 数据挖掘领域十大经典算法之-K-Means算法(超详细附代码) 数据挖掘领域十大经典算法之-SVM算法(超详细附代码) 数据挖掘领 ...

最新文章

  1. [IE编程相关]之一:客户端键盘响应事件分析
  2. mysql注入5.0以上_[Injection]对MYSQL 5.0服务器以上版本注入
  3. python中函数type可以测试对象类型_python类型检测最终指南--Typing模块的使用
  4. 面试时Android屏幕适配,Android—屏幕适配(面试技巧)
  5. 华为搭载鸿蒙系统的手表,华为手表Watch 3即将发布:搭载鸿蒙系统
  6. Java集合系列:Vector解析
  7. carlife android 无线,carlife无线连接流程是什么
  8. IPLATUI--下拉列表
  9. 微信小程序报错:invalid credential, access_token is invalid or not latest
  10. 如何自定义一个注解(@Annotation)
  11. 【快乐离散数学】谓词与量词 | 嵌套量词 | 狄摩根定律 | Predicates and Quantifiers | Nested Quantifiers
  12. java小易——Servlet轻量级服务
  13. Android4.0上添加截屏快捷方式
  14. 80个自我提升的网站
  15. 互联网平台如何快速搭建内容安全审核系统?
  16. java导出csv,实现单元格内换行
  17. Google发布了Kata操作系统
  18. Matlab从txt第二行开始读,MATLAB小技:从文本数据第n行开始读取
  19. 条条干货!超实用的5个Excel小技巧!
  20. GA受众群体之再营销设置

热门文章

  1. OpenCV:如何去除票据上的印章
  2. 【Proteus】单片机配合矩阵键盘LCD1602制作简易计算器
  3. 用MATLAB计算序列的离散傅里叶变换
  4. 翻译:利用GANs学习行人轨迹的多模态分布 Learning Multi-Modal Distributions of Pedestrian Trajectories with GANs
  5. 3G技术特点及市场分析
  6. 【Java数据结构与算法】实现二叉树的先根,中根,后根,层次遍历
  7. matlab互相关检测器,自相关函数和互相关函数的利用MATLAB计算和作图
  8. Latex论文参考文献引用的获取
  9. 装置案例| MODBUS转PROFINET网关连接智能低压电动机
  10. 读《深入理解Java虚拟机》笔记