zoukankan      html  css  js  c++  java
  • <数据结构基础学习>(五)递归

    一. 递归

    本质上,将原来的问题,转化为更小的同样的问题

    举例:数组求和

    Sum(arr[0... n-1]) = arr[0] + Sum(arr[1...n-1])  第二部分为更小的同一个问题

    Sum(arr[1...n-1]) = arr[1] + Sum(arr[2...n-1]) 第二部分为更小的同一个问题

    ......

    Sum(arr[n-1 ... n-1]) = arr[n-1] + Sum([ ]) 第二部分为最基本的问题

     
    //计算arr[l...n)范围里的数字和
    private static int sum(int[] arr, int l){ if(l == arr.length) return 0; //a return arr[l] + sum(arr,l+1); //b }

    a.求解最基本问题

    b.把原问题转化为更小的问题

    注意递归函数的“宏观”语意

    递归函数就是一个函数。完成一个功能

    二. 链表天然的递归性

    递归解决删除这个更小的链表中相应的元素

     删除链表中所有值为value的节点

     

    public ListNode removeElements(ListNode head, int val){
            if(head == null){
                return null;
            }
    
            ListNode res = removeElements(head.next, val);
            if(head.val == val){
                return res;
            }else{
                head.next = res;
                return head;
            }
        }

    程序调用的系统栈

    递归调用是有代价的:函数调用 + 系统栈空间

    和链表相关的话题

    递归

    近乎和链表相关的所有操作,都可以使用递归的形式完成。

    双向链表

    循环链表

    数组链表

  • 相关阅读:
    Java 反射机制
    Hibernate学习
    js学习
    如何在jsp中引入bootstrap
    bootstrap学习一
    第二章、初级篇
    定风波
    Java反射机制
    数据库的优化方法
    MySQL常用的查询语句回顾
  • 原文地址:https://www.cnblogs.com/HarSong13/p/10692296.html
Copyright © 2011-2022 走看看