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

    程序调用的系统栈

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

    和链表相关的话题

    递归

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

    双向链表

    循环链表

    数组链表

  • 相关阅读:
    【原创】ASP.NET Web开发,实现打印Log日志,步骤详解
    [原创] ASP.NET WEBAPI 接入微信公众平台 总结,Token验证失败解决办法
    Mac安装Linux
    mac下终端的一些命令
    《Python程序设计》题库--摘
    Day 28 类的用法延伸
    Day 27 面向对象补充
    Day 24~26 类,面向对象,属性
    Q 91~100
    Q 81~90
  • 原文地址:https://www.cnblogs.com/HarSong13/p/10692296.html
Copyright © 2011-2022 走看看