• <数据结构基础学习>(五)递归


    一. 递归

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

    举例:数组求和

    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;
            }
        }

    程序调用的系统栈

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

    和链表相关的话题

    递归

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

    双向链表

    循环链表

    数组链表

  • 相关阅读:
    STM32Cube Uart_DMA测试工程
    STM32CubeMX安装指南
    基于STM32Cube的ADC模数采样设计
    C++ this指针的用法
    用七段数码管显示26个字母的方案
    FPGA的引脚VCCINT 、VCCIO VCCA
    Keil环境中建立带FreeRTOS的STM32L项目
    STM32L时钟
    Mysql explain
    nginx屏蔽IP
  • 原文地址:https://www.cnblogs.com/HarSong13/p/10692296.html
Copyright © 2020-2023  润新知