利用单向链表 进行递归的实践

本文探讨了递归的基本原理,并通过修改经典故事进行生动解释。接着,通过汉诺塔问题展示了递归的应用,解析了递归解决复杂问题的思路。随后,文章转向了单向链表,讲解如何利用递归实现链表的增、删、查、显示等操作,代码注释详细阐述了实现过程。
摘要由CSDN通过智能技术生成

利用单向链表 进行递归的实践

更多干货见博主个人网站:https://blog.zhenglin.work

原理阐述

首先阐述一下什么叫递归呢,就是方法不断的自身调用,直至不满足条件,跳出这个递归循环;举个栗子:从前有座山,山里有座庙,庙里有个小和尚、小和尚让老和尚给他讲故事,然后老和尚开始讲故事:“从前有座山,山里有座庙,庙里有个小和尚、小和尚让老和尚给他讲故事,然后老和尚开始讲故事……” 这就是个递归,而且这是个死循环递归。
那正常的递归是什么样的呢,还是这个故事,稍作改动一下就可以了:从前有座山,山里有座庙,庙里有个5岁的小和尚、小和尚让老和尚给他讲故事,然后老和尚开始讲故事:“从前有座山,山里有座庙,庙里有个4岁的小和尚、小和尚让老和尚给他讲故事,然后老和尚开始讲故事……” 这个直至小和尚到1岁(因为0岁的小和尚还未出生),结束递归。

牛刀小试

public class Hannio {
   

   private void hanTest(int n,char from,char mid,char to) {
   
      if(n<1) {
   
         System.out.println("输入有误");
      }else if(n==1) {
   
         System.out.println("把第1个箱子从"+from+"移到"+to);
      }else {
   
         //把n-1个箱子 移动到mid上,to作为过渡
         hanTest(n-1, from, to, mid);
         //把第n个箱子移动到to上
         System.out.println("把第"+n+"个箱子从"+from+"移动到"+to);
         //把n-1个箱子从mid 移动到to上,from作为过渡;
         hanTest(n-1, mid, from, to);
      }
   }
  • 上面代码是简单实现一个汉诺塔程序,汉诺塔可以看作是一个比较典型的递归现象;

首先总结规律,不管多少个箱子移动,只有两种情况:第一种 只有一个箱子,从第一根柱子直接移动到第三根柱子上。 第二种 有两个箱子,先把第一个箱子移动到中间的柱子,第二个箱子移动到第三根柱子上,最后第一个箱子移动到第三根柱子上,完成任务。 那如果有很多箱子呢,比如有n个箱子呢,这个可以把n-1个箱子看成第一个箱子,n是第二个箱子;这样就很好移动了;先用递归方法让n-1个箱子移动到第二根柱子上,然后第n个箱子移动到第三根柱子上。最后再用递归实现剩下的n-1个箱子从第二根柱子上移动到第三根柱子上。

通过上面例子,基本理解了递归的本质了,接下来用递归实现单向链表,实现增、删、查、显示功能。

单向链表的实现

package</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值