博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归算法
阅读量:5869 次
发布时间:2019-06-19

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

  递归在算法中非常常见,可以让方法调用自己,比如二分查找法就可以用递归的方法来实现。不过笔者之前从来没有看过递归的规范,今天在翻阅算法第四版时,看到了一个编写递归代码的原则,特分享一下。

  1.递归总有一个最简单的情况——方法的第一条语句总是一个包含return的条件语句;

  2.递归总是去尝试解决一个规模更小的子问题,这样递归才能收敛到最简单的情况。

  3.递归调用的父问题和尝试解决的子问题之间不应该有交集。

 


  下面贴一段自己以前写的二分查找法的递归实现好了。当个反例,没有按照规范来写,XD。

package algorithm;public class BinarySearch_Rec {    //定义一个arr数组,需要查询值a在数组中的位置key    public int binarySearch(int a, int low, int high, int[] arr) {        //定义binary search中值mid        if(high>=low){            int mid=(high+low)/2;            if(a==arr[mid]){                return mid;            }else if(a>arr[mid]){                return (binarySearch(a,mid+1,high,arr));            }else {                return (binarySearch(a,low,mid-1,arr));            }        }else {            return -1;        }    }    public static void main(String[] args) throws Exception {        int[] arr = new int[]{123, 243, 534, 645, 126, 541, 64, 65};        BubbleSort bubbleSort = new BubbleSort();        bubbleSort.bubbleSort(arr);        BinarySearch_Rec binarySearchRec = new BinarySearch_Rec();        int key = binarySearchRec.binarySearch(645, 0, arr.length, arr);        bubbleSort.output(arr);        System.out.println(key+1);    }}

   对了,测试类里用了冒泡排序来给数组排序,否则二分查找法无法查找无序数组,笔者之前忘了,这里把冒泡排序的实现也贴一下好了(实际上是我懒得改代码用Array.sort()方法了,xd)

1 package algorithm; 2  3 public class BubbleSort { 4     public void bubbleSort(int[] arr) { 5         for (int x = 0; x < arr.length; x++) { 6             for (int y = 0; y < arr.length - 1; y++) { 7                 if (arr[y] > arr[y + 1]) { 8                     int index; 9                     index = arr[y];10                     arr[y] = arr[y + 1];11                     arr[y + 1] = index;12                 }13             }14         }15     }16 }

 

转载于:https://www.cnblogs.com/CNty/p/10918069.html

你可能感兴趣的文章
TiDB 源码阅读系列文章(二)初识 TiDB 源码
查看>>
Java集合(十二)Map概括,总结
查看>>
123
查看>>
字符串学习笔记
查看>>
32位和64位的操作系统的差异
查看>>
SVN 分支建立 和 合并
查看>>
Java 中的 Integer 和 int 学习笔记
查看>>
OpenWRT开发之——目录分析与make过程
查看>>
连接收藏
查看>>
Android上传图片裁剪功能
查看>>
redis常用的命令
查看>>
jsrender demo
查看>>
C语言学习笔记之获取文件长度
查看>>
12.1 LNMP架构介绍 12.2 MySQL安装12.3/12.4 PHP安装 12.5 Nginx介绍
查看>>
iOS中perform+@selector多参数传递
查看>>
Mysql列类型:日期时间型
查看>>
java 编程中的非空判断怎么加才优雅?
查看>>
yum源修改
查看>>
tensorflow源码安装教程
查看>>
export table data in to Excel using jQuery
查看>>