写递归函数的一些思考

当编写递归函数时,有几个关键的思考点可以帮助你设计和实现递归算法:

  1. 定义递归的基本情况:确定递归函数应该在何时终止,即递归的基本情况。这是一个递归的出口条件,确保递归不会无限进行下去。基本情况应该是可以直接求解或返回的简单情况。

  2. 确定递归的问题规模:考虑如何将原问题分解为规模更小的子问题。递归函数应该在每一次递归调用时减小问题的规模,使得递归最终会达到基本情况。

  3. 利用递归调用解决子问题:在递归函数中调用自身来解决子问题。递归调用应当是朝着基本情况逼近的方向进行的,以确保问题规模不断缩小。

整合子问题的结果:在递归函数中,将子问题的解合并为原问题的解。这可能涉及到对子问题结果的处理、组合、计算等操作,以获得最终的结果。

无论是表格路径搜索的dfs,还是说其他的递归问题,都可以用这一套思想来处理,下面的题目是695. 岛屿的最大面积做路径搜索dfs的例子
在这里插入图片描述

我的小思考就是:最直接的想法就是:想清楚你写的递归函数的作用是什么,自然而然也就能写出清晰明了的递归函数了。

比如对于上方的代码,我的backing递归函数的作用就是返回我能走过路的最大路长(面积)【一路走到黑】;因此对于子问题的处理我只需要交给backing函数,而对于原问题的处理,我只需要在已有的步长1的基础上,加上子问题返回的backing即可,最终返回我的答案res,也就是上面图片所示。

附上完整代码

class Solution {int[][] directions = new int[][]{{-1,0},{1,0},{0,1},{0,-1}};int row;int col;public int maxAreaOfIsland(int[][] grid) {row = grid.length;col = grid[0].length;int max = 0;for(int i=0;i<row;i++){for(int j=0;j<col;j++){if(grid[i][j]==1){max = Math.max(max,backing(i,j,grid));}}}return max;}public int backing(int x,int y,int[][] grid){if(x<0 || y <0 || x>=row || y>=col || grid[x][y]==0){return 0;}//grid[x][y] = 0;  //防止重复走绕圈情况,也可以单独用一个visited[][]标记int res = 1;  //能走到这里,说明grid[x][y]==1for(int i=0;i<4;i++){int[] direction = directions[i];res += backing(x+direction[0],y+direction[1],grid);}return res;}}

其他问题的迁移 【 463. 岛屿的周长】
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/229250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FL Studio 21.1.0.3713中文版最新安装激活图文教程及系统配置要求

FL Studio 21.1.0.3713中文版是一款功能强大的编曲软件&#xff0c;它也能够剪辑、混音、录音&#xff0c;它的矢量界面&#xff0c;能更好用在4K、5K甚至8K显示器上。完全重新设计混音器、动态缩放、具有 6 种布局风格、外加 3个用户自定义面板管理音轨、多推子选择和调整、混…

正大杯获奖作品在哪可以看见

通过网盘分享的文件&#xff1a;2023年第十三届正大杯最新国家一等奖完整获奖作品报告等全套资料 链接:https://pan.baidu.com/s/1SPA4LumSCI4BZdCRXXnW6Q?pwdc8bj 提取码:c8bj 2023年第十三届最新正大杯国家一等奖完整获奖作品等全套资料获取方式链接https://ex59573j43x.fe…

root登录提示:Access denied

一、问题&#xff1a; 在使用xshell工具用root账号登录服务器时提示Access denied&#xff0c;拒绝访问&#xff0c;SSH服务器拒绝了密码&#xff0c;但用其它用户又可以连接. 二、原因 是因为sshd的设置不允许root用户用密码远程登录的问题 三、解决办法 使用可以登录的账…

【C++11特性篇】C++11中の【override】【final】关键字——帮助用户检测是否重写

前言 大家好吖&#xff0c;欢迎来到 YY 滴C系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.【override】【final】关键字——帮…

实战经验:如何利用房产小程序提升客户满意度?

在当今的数字化时代&#xff0c;房产中介公司需要不断地适应市场变化&#xff0c;提供更加便捷、高效的服务。小程序作为一种轻量级的应用程序&#xff0c;具有无需下载、易于分享、随时可用等优点&#xff0c;可以为房产中介公司提供一个新的销售渠道。本文将介绍如何使用乔拓…

代码随想录算法训练营Day4 | 24.两两交换链表中的节点、19.删除链表的倒数第 N 个节点、面试题. 链表相交、142.环形链表II

LeetCode 24 两两交换链表中的节点 本题要注意的条件&#xff1a; 遍历终止条件改变引用指向的时候&#xff0c;需要保存一些节点记录 为了更好的操作链表&#xff0c;我定义了一个虚拟的头节点 dummyHead 指向链表。如下图所示 既然要交换链表中的节点&#xff0c;那么肯定…

小姐姐跳舞,AI 视频生成太酷了

大家好&#xff0c;我是章北海 最近AI视频领域的研究进展神速&#xff0c;看得眼花缭乱。 这里老章就把最近几天看过印象深刻的四个项目介绍给大家&#xff0c;同时附上项目相关简介、论文、代码等资料&#xff0c;感兴趣的同学可以深度研究一下。 《SMPLer-X:放大表达性人体…

uniapp实现地图电子围栏功能

该功能使用uniapp中内置组件map实现 效果图预览&#xff1a; 实现过程&#xff1a; 1.文档&#xff1a; 2.代码&#xff1a; <template><view><map :style"width: 100%; height:screenHeight" :latitude"latitude" :longitude"longit…

04 开发第一个组件

概述 在Vue3中&#xff0c;一个组件就是一个.vue文件。 在本小节中&#xff0c;我们来开发第一个Vue3组件。这个组件的功能非常的简单&#xff0c;只需要在浏览器上输出一个固定的字符串”欢迎跟着Python私教一起学Vue3“即可。 实现步骤 第一步&#xff1a;新增src/compon…

SpringCloud 和 Linux 八股文第一期五问五答

SpringCloud 和 Linux 八股文第一期五问五答 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1.Linux怎么查看文件内容 在 Linux 系统中&#xff0c;有多种方式可以…

mysql8支持远程访问

上面的localhost要改为%号就打开了远程访问 ALTER USER root% IDENTIFIED WITH mysql_native_password BY fengzi2141;

【第1期】SpringSecurity基于角色和权限的细粒度接口权限控制

SpringSecurity 细粒度权限控制 一、Role 和 Authority的区别 角色用来表示某一类权限的集合&#xff0c;权限粒度更小&#xff0c;方便细粒度控制 二、创建用户、角色、权限相关表&#xff1a; CREATE TABLE common_user (id bigint(20) NOT NULL COMMENT 主键id,login_na…

ES查询流程

在ES中查询分为两类&#xff1a;1.基于文档ID查询&#xff0c;2.按照非文档ID查询。 基于文档id查询 1.基于文档ID查询 当执行如下查询时&#xff1a; GET /megacorp/employee/1ES在执行上述查询的具体过程如下&#xff1a; 1、客户端向 Node 1 发送获取请求&#xff0c;此…

【注解和反射】--05 反射的性能对比、反射操作泛型和注解

反射 05 性能对比分析 下面对比了通过普通new方式、反射方式及关闭Java语言安全检测的反射方式三种情况下&#xff0c;程序的性能(所需时间)。 package com.duo.reflection;import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;//性能测试…

WPF——命令commond的实现方法

命令commond的实现方法 属性通知的方式 鼠标监听绑定事件 行为&#xff1a;可以传递界面控件的参数 第一种&#xff1a; 第二种&#xff1a; 附加属性 propa&#xff1a;附加属性快捷方式

第25节: Vue3 带组件

在UniApp中使用Vue3框架时&#xff0c;你可以使用组件来封装可复用的代码块&#xff0c;并在需要的地方进行渲染。下面是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用带组件&#xff1a; <template> <view> <button click"toggleActive&q…

解决引入外部文件(图片、js等)出现 403 net::ERR_ABORTED 的问题

页面中引入外网的连接资源&#xff0c;会产生一个新的http请求。为了安全&#xff08;URL里可能包含用户信息&#xff09;&#xff0c;浏览器通常都会给这写请求头加上表示来源的referrer 字段。 因此&#xff0c;此时咱们须要隐藏外部连接中的referrer&#xff0c;在head标签…

React的JSX

React JSX 大家好,欢迎来到 React JSX 的课程。在这一课中,我们将学习如何在 React 中使用 JSX。 什么是 JSX? JSX 是一种 JavaScript 的语法扩展,它看起来很像 XML。 const element = <h1>Hello, world!</h1>;这种看起来可能有些奇怪的标签语法既不是字符…

CCNP课程实验-OSPF-CFG

目录 实验条件网络拓朴需求 配置实现基础配置1. 配置所有设备的IP地址 实现目标1. 要求按照下列标准配置一个OSPF网络。 路由协议采用OSPF&#xff0c;进程ID为89 &#xff0c;RID为loopback0地址。3. R4/R5/R6相连的三个站点链路OSPF网络类型配置成广播型&#xff0c;其中R5路…

springboot使用EasyExcel导出数据

springboot使用EasyExcel导出数据 简介&#xff1a;本文主要描述使用EasyExcel导出数据的简单流程&#xff0c;事实上企业需求一般都比较简单&#xff0c;就是表单数据输出到Excel即可&#xff0c;如果数据量大的话&#xff0c;为了避免占用内存过高或者OOM&#xff0c;使用多…