十六 递归

Posted ltfxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了十六 递归相关的知识,希望对你有一定的参考价值。

递归:本质上是将原来的问题转化为更小的同一问题。

递归的两个步骤:

  •   一、求解最基本问题
  •   二、把原问题转化成更小的问题,构建递归过程,把最小规模的解,构建称为原问题的解

 

示例:递归解决数组求和问题:

package com.lt.datastructure.LinkedList;
/**
 * 示例:利用递归为数组求和
 */
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[] arr = {1,2,3,4,5,6};
          System.out.println(sum(arr));
    }
}

利用递归解决LeetCode203:

链表的天然递归性:

0--->一个更短的链表,少了一个节点的原链表

技术分享图片

代码实现:

package com.lt.datastructure.LinkedList;

public class Solution3 {
   /*
    * 如果head为空,返回Null
    * res 为去掉第一个结点的子链表
    * 如果head的值为val,返回res,删除了第一个结点,后接子链表
    * 如果head的值不为val,保留,返回第一个结点,将head后的删除val的子链表接上
    * 即:head后指针指向res:head.next = res
    *     
    */
   public static ListNode removeElements(ListNode head, int val) {
      //空链表,或者链表遍历判断完成
      if(head == null){
          return null;
      }
      head.next = removeElements(head.next, val);
      return head.val == val? head.next : head;  
//      //将原问题转换成转换为更小的问题
//      ListNode res = removeElements(head.next,val);
//      //如果头结点为val,调用res删除,从下一个结点开始继续调用
//      if(head.val == val){
//          return res;
//      }else{
//       //如果头结点不为val,保留头结点,从下一个结点开始判断
//       //head.next指向去掉结点的子链表
//          head.next = res;
//          return head;
//      }
      
   }
       
    public static void main(String[] args) {
            int[] nums = {1,2,3,6,4,5,6};
            ListNode head = new ListNode(nums);
            System.out.println(head);
            ListNode res = removeElements(head, 6);
            System.out.println(head);
        }
    
}

 

以上是关于十六 递归的主要内容,如果未能解决你的问题,请参考以下文章

Python学习(十六)内置函数,递归

Haskell:递归地将十六进制字符串转换为整数?

CSP核心代码片段记录

如何递归地将十六进制转换为十进制[关闭]

executePendingTransactions 的递归入口

nodejs常用代码片段