Java - 13 方法的递归

news/2024/10/6 15:50:41/文章来源:https://www.cnblogs.com/wxrwajiez/p/18449104

Java - 13 方法的递归

递归必须向退出递归的条件逼近

斐波那契数列

  1. 当n=1,1
  2. 当n=2,1
  3. 当n >= 3,是前两个数的和
public class Recursion{public static void main(String[] args) {Fbnq f = new Fbnq();int n = 7;int res = f.num(n);if(res!=-1)System.out.println(res);}
}class Fbnq {public int num(int n){if(n<1){System.out.println("text the number >= 1");return -1;			}else{if(n > 2)return num(n-1)+num(n-2);elsereturn 1;}}
}
  • 考虑无效输入的情况,返回-1,用-1控制输出

猴子吃桃

  1. 第10天,1个桃子
  2. 第9天,(1+1)*2个桃子
public class Recursion{public static void main(String[] args) {Monkey m = new Monkey();int res = m.peach(9);if (res!=-1)System.out.println(res);}
}class Monkey {public int peach(int n){if(n == 10){return 1;}else if(n>=1&&n<=9){return (peach(n+1)+1)*2;}else{System.out.println("1-10");return -1;}}
}

迷宫

public class Migong{public static void main(String[] args) {// draw mapint[][] map = new int[8][7];for(int i = 0; i<map[i].length; i++){map[0][i] = 1;map[7][i] = 1;}for(int i = 0; i<map.length; i++){map[i][0] = 1;map[i][6] = 1;}map[3][1] = 1;map[3][2] = 1;map[2][2] = 1;for(int i = 0; i<map.length; i++){for(int j = 0; j<map[i].length; j++){System.out.print(map[i][j]+" ");}System.out.println("");}// find wayMigong m = new Migong();m.findWay(map, 1, 1);System.out.println("============");// check the mapfor(int i = 0; i<map.length; i++){for(int j = 0; j<map[i].length; j++){System.out.print(map[i][j]+" ");}System.out.println("");}}
}class Migong {/* 1: barrier 2: can pass 3: cant pass */public boolean findWay(int[][] map, int i, int j){if(map[6][5] == 2)return true;else if(map[i][j] == 0){map[i][j] = 2; // assume it can go through// go downif(findWay(map, i+1, j))return true;// go rightelse if(findWay(map, i, j+1))return true;// go upelse if(findWay(map, i-1, j))return true;// go leftelse if(findWay(map, i, j-1))return true;else{map[i][j] = 3;return false;}}else{return false;}}
}

Hanoi

public class Hanoi{public static void main(String[] args) {Hanoi tower = new Hanoi();tower.move(5,'A','C','B');}
}class Hanoi {public void move(int num, char from, char to, char help){if(num == 1)System.out.println(from + "->" + to);else{move(num-1, from, help, to);System.out.println(from + "->" + to);move(num-1, help, to, from);}}
}

八皇后

import java.util.ArrayList;
import java.util.List;
public class Try{public static void main(String[] args) {int n = 8;Solution s = new Solution();s.solveNQueens(n);}
}
class Solution {public void solveNQueens(int n) {int count = 0;int[] solve = new int[n];for(int i = 0; i<n; i++){solve[i] = -1;}List<int[]> solves = new ArrayList<>();findQ(n, 0, solve, solves);// 遍历 Listfor (int[] array : solves) {count++;System.out.print("solution: ");for (int num : array) {System.out.print(num + " ");}System.out.println();}System.out.println(count); // 一共解法}public void findQ(int n, int row, int[] solve, List<int[]> solves){ // n:一共的行数(8); row:当前的行数(0-7); solvefor(int i = 0; i<n; i++){if(row == n){ // 最后一行已经下好Q了solves.add(solve.clone()); // *return ;}else{solve[row] = i; // 假设下在第row+1行的i+1个位置if(isValid(solve, row))findQ(n, row+1, solve, solves); // 继续找下一行solve[row] = -1; // 回溯}    }}public boolean isValid(int[] sol, int row){boolean flag1;boolean flag2;boolean flag3;for(int n = 0; n<row ; n++){for(int m = n+1; m<=row; m++){flag1 = sol[n] == sol[m]; // 在同一列flag2 = (n - sol[n]) == (m - sol[m]); // 在左上\右下flag3 = (n + sol[n]) == (m + sol[m]); // 在左下\右上if(flag1 || flag2 || flag3)return false;}}return true;}    }

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

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

相关文章

Java - 10 二维数据

Java - 10 二维数据 一维数组的每个元素又是一个一维数组 静态初始化 int[][] arr = {{0,0,0,0},{1,1,1,1},{2,2,2,2},{3,3,3,3}};public class TwoDimensionArray {public static void main(String[] args) {int[][] arr = {{0,0,0,0},{1,1,1,1},{2,2,2,2},{3,3,3,3}};// 遍历…

Java - 11 类与对象

Java - 11 类与对象 类 类[属性, 行为] ->对象[属性, 行为] public class Test{public static void main(String[] args){Cat cat1 = new Cat(); // 创建对象cat1.name = "大宝";cat1.age = "3";cat1.color = "orange";System.out.println(ca…

20222413 2024-2025-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 在本周的学习过程中,我了解到了许多缓冲区溢出攻击的实际案例、缓冲区溢出攻击的原理和相关基础知识,包括GDB调试器的使用方法、反汇编、基础的汇编语言与指令等,重新温习了函数调用过程和进程管理方面的知识内容。并且通过实验一,我能够了解并熟练完成Linux系统…

函数的上下文

函数的上下文 概述 在函数体的语句中,会出现this这个词,this就是函数的上下文 函数中this是谁,就说明函数的上下文是谁 函数中的this是谁,要看是如何调用的,因为this不是一成不变的 比如我们看下面的例子 var obj = {a: 100,fun: function() {console.log(this.a);} };我们…

拥挤聚集智能监测系统

拥挤聚集智能监测系统可以通过对人员数量、密度等进行实时监测,拥挤聚集智能监测系统识别出拥挤聚集的情况,并及时发出预警。拥挤聚集智能监测系统可以通过对人员进车间的人数等进行监测,识别出是否存在人员拥堵、挤压等安全隐患,及时发出警报,提醒工作人员采取措施疏散人…

睡岗识别 AI助力企业安全管控

睡岗识别可以通过AI视频智能分析技术,睡岗识别识别出操作人员是否存在睡岗情况。例如,在变电站等场景中,睡岗识别技术可以通过对识别出操作人员是否存在睡岗情况,及时发出预警,避免因操作人员的疏忽而导致的安全事故。在工厂车间中,睡岗识别技术可以通过对工人的行为进行…

加油站安全风险监测预警系统

加油站安全风险监测预警系统可以通过对加油站设备、环境、人员等方面进行监测,加油站安全风险监测预警系统实现对加油站的全面监管。例如,在加油站油罐区中,加油站安全风险监测预警系统可以对加油站人员抽烟打电话、明火烟雾等环境安全隐患进行自动识别,及时发出预警,避免…

山西煤矿电子封条

山西煤矿电子封条通过AI视觉分析技术,山西煤矿电子封条实现对各矿区(煤矿和非煤矿区)每日矿井出入井人监察控制、调度室空岗识别、煤矿生产作业状态、摄像头遮挡、挪动角度识别、货运车辆出矿识别等。山西煤矿电子封条实现当前待办事项的推送,以及对各矿区用户区域内的报警…

离岗识别 AI助力企业安全管控

离岗识别通过yolov5网络模型技术,离岗识别可以自动识别办公室、工厂、监控室监控画面中人员离岗脱岗睡岗等行为,发现违规行为立即抓拍告警并同步睡岗离岗等违规数据到后台提醒值班人员及时处理。离岗识别采用人工智能算法识别技术对各主控室、办公室、工厂、煤矿监控室等人员…

登高作业安全带穿戴识别系统 - 保障登高作业人员安全

登高作业安全带穿戴识别系统是一种通过Ai视觉智能分析技术,登高作业安全带穿戴识别系统实现对登高作业人员是否穿戴安全带进行监测的系统,登高作业安全带穿戴识别系统通过视频监控智能识别技术检测登高作业人员是否佩戴安全带,并及时发出警报,以提醒工作人员及时穿戴安全带…

MySQL单表存多大的数据量比较合适

前言 经常使用MySQL数据库的小伙伴都知道,当单表数据量达到一定的规模以后,查询性能就会显著降低。因此,当单表数据量过大时,我们往往要考虑进行分库分表。那么如何计算单表存储多大的数据量合适?当单表数据达到多大的规模时,我们才要进行分库分表呢? MySQL存储方式 首先…

【THM】kiba练习

脚本小子是这样的,黑客只要写POC就可以,可是脚本小子要考虑的事情就多了。 学到了新知识:利用网上的POC进行复现、利用Capabilities进行提权【THM】kiba练习 与本文相关的TryHackMe实验房间链接:TryHackMe | kiba 简介:识别数据可视化仪表板中允许执行远程代码执行的关键…