博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.数据结构--递归
阅读量:4707 次
发布时间:2019-06-10

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

将原来的问题,转化为更小的同一问题

public class Sum {    public static int sum(int[] arr){        return sum(arr,0);    }    //计算arr[l...n]这个区间内所有数字的和    private static int sum(int[] arr,int l){        //求解最基本的问题        if(l == arr.length)            return 0;        //把原问题转化为更小的问题        return arr[l] + sum(arr,l + 1);    }    public static void main(String[] args) {        int[] nums = {
1, 2, 3, 4, 5, 6, 7, 8}; System.out.println(sum(nums)); //36 }}

1.链表的天然递归结构性质

解决链表中删除元素的问题

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution3 {    public ListNode removeElements(ListNode head, int val) {       if(head == null)           return null;       head.next = removeElements(head.next,val);       return head.val == val ? head.next : head;    }    public static void main(String[] args) {        int[] nums = {
1, 2, 6, 3, 4, 5, 6}; ListNode head = new ListNode(nums); System.out.println(head); //1->2->6->3->4->5->6->NULL ListNode res = (new Solution()).removeElements(head , 6); System.out.println(res); //1->2->3->4->5->NULL }}

2.递归运行的机制

 

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution4 {    public ListNode removeElements(ListNode head, int val,int depth) {        String depthString = generateDepthString(depth);        System.out.print(depthString);        System.out.println("Call: remove " + val +" "+ head);        if(head == null){            System.out.print(depthString);            System.out.println("Return " + head);            return null;        }        ListNode res = removeElements(head.next,val,depth + 1);        System.out.print(depthString);        System.out.println("After remove " + val + ": " + res);        ListNode ret;        if(head.val == val)            ret = res;        else{            head.next = res;            ret = head;        }        System.out.print(depthString);        System.out.println("Return: " + ret);        return ret;    }    private String generateDepthString(int depth){        StringBuilder res = new StringBuilder();        for(int i = 0;i < depth;i ++){            res.append("--");        }        return res.toString();    }    public static void main(String[] args) {        int[] nums = {
1, 2, 6, 3, 4, 5, 6}; ListNode head = new ListNode(nums); System.out.println(head); ListNode res = (new Solution4()).removeElements(head , 6,0); System.out.println(res);// 1->2->6->3->4->5->6->NULL// Call: remove 6 1->2->6->3->4->5->6->NULL// --Call: remove 6 2->6->3->4->5->6->NULL// ----Call: remove 6 6->3->4->5->6->NULL// ------Call: remove 6 3->4->5->6->NULL// --------Call: remove 6 4->5->6->NULL// ----------Call: remove 6 5->6->NULL// ------------Call: remove 6 6->NULL// --------------Call: remove 6 null// --------------Return null// ------------After remove 6: null// ------------Return: null// ----------After remove 6: null// ----------Return: 5->NULL// --------After remove 6: 5->NULL// --------Return: 4->5->NULL// ------After remove 6: 4->5->NULL// ------Return: 3->4->5->NULL// ----After remove 6: 3->4->5->NULL// ----Return: 3->4->5->NULL// --After remove 6: 3->4->5->NULL// --Return: 2->3->4->5->NULL// After remove 6: 2->3->4->5->NULL// Return: 1->2->3->4->5->NULL// 1->2->3->4->5->NULL }}

 

转载于:https://www.cnblogs.com/zouke1220/p/9501676.html

你可能感兴趣的文章
MS SQL 日期转字符全格式
查看>>
Navigator对象(转)
查看>>
IOS-社会化分享
查看>>
json/xml processing model与xml和json的简要区别
查看>>
session学习
查看>>
新手福利:真机调试无需开发者证书
查看>>
exp8 web基础
查看>>
01-π、自然常识e、导数、导数的单调性
查看>>
(windows版)Mysql cluster 7.2集群单机多实例
查看>>
LogUtils.java
查看>>
如何在Oracle中建表空间、建用户并导入dmp文件详解
查看>>
一些未注意到的命名规范
查看>>
通过Html5 Canvas画柱状图
查看>>
青蛙跳台阶(Fibonacci数列)
查看>>
洛谷P3834 [模板]可持久化线段树1(主席树) [主席树]
查看>>
Codeforces Round #316 (Div. 2)C. Replacement(模拟)
查看>>
Python入门学习笔记17(sqlalchemyd的使用)
查看>>
.NET CORE TOKEN 权限验证
查看>>
.Net Core 中间件之主机地址过滤(HostFiltering)源码解析
查看>>
cordova百度地图定位Android版插件
查看>>