博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归算法
阅读量:5924 次
发布时间: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

你可能感兴趣的文章
快速排序——Java
查看>>
unity游戏与我
查看>>
187. Repeated DNA Sequences
查看>>
iis6 zencart1.39 伪静态规则
查看>>
SQL Server代理(3/12):代理警报和操作员
查看>>
基于事件驱动的DDD领域驱动设计框架分享(附源代码)
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
$resource in AngularJS
查看>>
java虚拟机学习笔记 【1】
查看>>
DUBBO笔记
查看>>
nginx php上传大文件的设置(php-fpm)
查看>>
MySQL 运行状态监控方法
查看>>
Fedora 12 环境下Gtk+开发环境配置
查看>>
vs2008中在解决方案资源管理器查看当前打开文件
查看>>
ubuntu14.04 鼠标闪烁问题
查看>>
jQuery Lightbox(balupton版)图片展示插件demo
查看>>
Elasticsearch集群的简单搭建
查看>>
SCRT-SSH传输文件
查看>>
Python非常cool的svg格式chart生成库pygal
查看>>