首页 > 其他分享 >递归的练习

递归的练习

时间:2023-12-18 16:03:08浏览次数:30  
标签:arr 递归 int 练习 兔子 File public

递归

递归的介绍

  • 以编程的角度来看,递归指的是方法定义中调用方法本身的现象
  • 把一个复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解
  • 递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算

递归的基本使用

1.不死神兔问题:有1对兔子,从出生后的第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月有几对兔子

public class DiGuiDemo {
      public static void main(String[] args) {
          //求第20个月兔子的对数
          //每个月的兔子对数:1,1,2,3,5,8,...
          int[] arr = new int[20];
  
          arr[0] = 1;
          arr[1] = 1;
  
          for (int i = 2; i < arr.length; i++) {
              arr[i] = arr[i - 1] + arr[i - 2];
          }
          System.out.println(arr[19]);
          System.out.println(f(20));
      }
  
      /*
          递归解决问题,首先就是要定义一个方法:
              定义一个方法f(n):表示第n个月的兔子对数
              那么,第n-1个月的兔子对数该如何表示呢?f(n-1)
              同理,第n-2个月的兔子对数该如何表示呢?f(n-2)
  
          StackOverflowError:当堆栈溢出发生时抛出一个应用程序递归太深
       */
      public static int f(int n) {
          if(n==1 || n==2) {
              return 1;
          } else {
              return f(n - 1) + f(n - 2);
          }
      }
  } 

2.给定一个路径(E:\51cto),通过递归完成遍历该目录下所有内容,并把所有文件的绝对路径输出在控制台

public class DiGuiDemo02 {
      public static void main(String[] args) {
          //根据给定的路径创建一个File对象
          File srcFile = new File("E:\\51cto");
  
          //调用方法
          getAllFilePath(srcFile);
      }
  
      //定义一个方法,用于获取给定目录下的所有内容,参数为第1步创建的File对象
      public static void getAllFilePath(File srcFile) {
          //获取给定的File目录下所有的文件或者目录的File数组
          File[] fileArray = srcFile.listFiles();
          //遍历该File数组,得到每一个File对象
          if(fileArray != null) {
              for(File file : fileArray) {
                  //判断该File对象是否是目录
                  if(file.isDirectory()) {
                      //是:递归调用
                      getAllFilePath(file);
                  } else {
                      //不是:获取绝对路径输出在控制台
                      System.out.println(file.getAbsolutePath());
                  }
              }
          }
      }
  }

递归的注意事项

  • 递归一定要有出口。否则内存溢出
  • 递归虽然有出口,但是递归的次数也不宜过多。否则内存溢出
  • 一般在实际项目不太建议优先使用递归

标签:arr,递归,int,练习,兔子,File,public
From: https://blog.51cto.com/u_15527112/8874753

相关文章

  • Pwn 练习随笔
    pwn练习随笔1. [SWPUCTF2021新生赛]nc签到 打开附件发现是py源码。 importosart='''(("####@@!!$$))`#####@@!$$`))(('####@!!$:((,####@!!$:)).###@!!$:`##@@!$:`#@!!$!@#`#@!$:......
  • C练习——判断闰年
    闰年的判断规则如下:(1)若某个年份能被 4 整除但不能被 100 整除,则是闰年。(2)若某个年份能被 400 整除,则也是闰年。逻辑转化,(4&& !100)||400打印1000~2000年之间的闰年#include<stdio.h>//判读是否为闰年,是1,否-1//逻辑,(4&&!100)||400intis_leap(intx){......
  • python递归求解青蛙跳台阶问题
    一只青蛙一次可以跳上1级台阶,也可以跳上2级。请问该青蛙跳上一个n级的台阶总共有多少种跳法。输入台阶数,输出一共有多少种跳法。defjump1(n):ifn==1:return1elifn==2:return2else:returnjump1(n-1)+jump1(n-2)x=eval(input())pr......
  • 2023-12/18数据结构练习
    给定一系列整型关键字和素数P,用除留余数法定义的散列函数H(Key)=Key将关键字映射到长度为P的散列表中。用线性探测法解决冲突。1#include<stdio.h>2inta[1009],b[1009];3intmain(){4intn,p;5scanf("%d%d",&n,&p);6intx,i,j;7for(i=0;i......
  • 在linux中,用-r还是-p处理递归的文件夹
    在Linux中,递归处理文件夹用-r还是-p选项1.使用-r:-r来表示递归,例如cp和rm。例如:-r通常用于表示递归操作,例如在复制目录或删除目录时使用。示例:复制目录及其内容:cp-rsource_directorydestination_directory递归删除目录及其内容:rm-rdirectory递归地移动目......
  • 【每日练习】将字符串翻转到单调递增、使字符串平衡的最少删除次数
    将字符串翻转到单调递增https://leetcode.cn/problems/flip-string-to-monotone-increasing/如果一个二进制字符串,是以一些0(可能没有0)后面跟着一些1(也可能没有1)的形式组成的,那么该字符串是单调递增的。给你一个二进制字符串s,你可以将任何0翻转为1或者将1翻转为0......
  • Java-递归经典题目-汉诺塔
    一、问题TowerofHanoi,是一个源于印度的古老传说:大梵天创建世界时做了三根金刚石柱,在一根柱子从上往下按大小顺序摞着64片黄金圆盘,大梵天命令婆罗门把圆盘重新摆放在另一根柱子上,并且规定:一次只能移动一个圆盘小圆盘上不能放大圆盘请使用程序代码模拟圆盘的移动过程,并估算出时间......
  • Java-递归-爆栈问题
    一、递归时出现的错误现使用单路递归的方法进行n到一的求和,用Java代码实现如下://递归求和n+(n-1)+...+1publicclassE06Sum{publicstaticvoidmain(String[]args){longs=sum(15000);System.out.println(s);}//f(n)=f(n-1)......
  • C和C++练习
    要点:1、数组2、冒泡排序BubbleSort3、带指针的结构体(malloc,free)4、字符串操作(拷贝、逆序、比较)5、格式化输出printf,sprintf6、格式化输入,scanf,sscanf7、文件操作fopen,feof,EOF,fputc,fgetc,fputs,fgets,stdin,stdout8、数组传参(需要指定长度)、字符串传参(不需指定长度......
  • 链表递归题型
    递归的定义在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。若调用自身,称之为直接递归。若过程或函数p调用过程或函数q,而q又调用p,称之为间接递归。递归算法的设计递归的求解过程均有这样的特征:先将整个问题划分为若干个子问题,通过分别求解子问题,最后获......