Java 递归与 集合工具类Collections 或哈希算法

本文详细介绍了Java中的递归概念、基本原理及优缺点,包括递归函数的执行过程和注意事项。接着,讨论了集合工具类Collections的使用,如排序操作。最后,探讨了哈希算法,包括哈希函数的构造方法和处理冲突的策略。
摘要由CSDN通过智能技术生成

递归

递归的定义:
函数内部调用的自身函数的编程技巧称为递归。
构成递归的条件:

  1. 子问题须与原始问题为同样的事,且更为简单;
  2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。

递归的基本原理

  1. 每一级的函数调用都有自己的变量。
  2. 每一次函数调用都会有一次返回。当程序执行到某一级递归的结尾处时,它会转移到前一级递归继续执行。程序不能直接返回到main()中的初始调用部分,而是通过递归的每一级逐步返回,即从func()的某一级递归返回到调用它的那一级。
  3. 递归函数中,位于递归调用前的语句和各级被调函数具有相同的执行顺序。
  4. 递归函数中,位于递归调用后的语句的执行顺序和各个被调函数的顺序相反。
  5. 虽然每一级递归都有自己的变量。但是函数代码并不会得到复制。函数代码是一系列的计算机指令。而函数调用就是从头执行相应函数的指令集,除了会每次创建变量,递归调用非常类似于一个循环语句。
  6. 递归函数中必须包含可以终止递归调用的语句。

递归的优缺点
优点:

  • 简洁
  • 在树的前序,中序,后序遍历算法中,递归的实现明显要比循环简单得多。
    缺点:
    效率性:
  • 递归由于是函数调用自身,而函数调用是有时间和空间的消耗的:每一次函数调用,都需要在内存栈中分配空间以保存参数、返回地址以及临时变量,而往栈中压入数据和弹出数据都需要时间。
  • 递归中很多计算都是重复的,由于其本质是把一个问题分解成两个或者多个小问题,多个小问题存在相互重叠的部分,则存在重复计算,如fibonacci斐波那契数列的递归实现。
    性能性:
  • 调用栈可能会溢出,其实每一次函数调用会在内存栈中分配空间,而每个进程的栈的容量是有限的,当调用的层次太多时,就会超出栈的容量,从而导致栈溢出。
package 递归;
public class numbers {
   
 public static int sum(int i) {
   
  if (i == 1) {
   
   return 1;
  } else {
   
   return i + sum(i - 1);
  }
 }
 public static String sums(int i) {
   
  int j = 0;
  if (i == 1) {
   
   j = 1;
  } else {
   
   j = i + Integer.parseInt(sums(i - 1));
  }
  return String.valueOf(j);
 }
 public static String numcheng(int i) {
   
  if (i == 1) {
   
   return "1";
  } else {
   
   return (numcheng(i - 1)) + "*" + i;
  }
 }
 public static int mus(int i) {
   
  if (i == 1) {
   
   return 1;
  } else {
   
   return</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~plus~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值