常用的算法-递归

常用的算法-递归

        最近开始复习数据结构和算法的相关知识,以前学习数据结构的时候使用C语言实现其中的数据存储结构。已经学习Java有一年多了,总是忙于写代码,学习新知识,思考总是一瞬间的事,然而这样的境遇总是让我在学习Java软件开发的过程中遇到很多问题,为此牺牲了很多时间。

      突然决定启用51Blog来记录每一次尝试,探索,错误的历经。

      递归算法的核心在于:

     方法能够通过自身的调用得到执行,并且总会得到调用结束的出口。

     递归(recursion):神奇的算法

      递归编程的注意事项:
      递归代码会精彩而且会很短,但却能够完成很复杂的工作;
      大部分代码是用来对负责底层工作的递归方法进行支持。
   

    递归和迭代的区别:

    迭代:一种用循环来描述需要的重复进行的操作的编程方法。
    递归:一种通过调用某个方法来描述需要重复进行的操作的编程方法,该方法的一个基本特  征是:它可以调用自身


  1. iteration algorithm:  
  2.         public static void writeStar(int n)  
  3.         {  
  4.             for(int i=1;i<n;i++)  
  5.             {  
  6.                 System.out.print(” * “);  
  7.             }  
  8.         System.out.println();  
  9.         }  
  10.     recursion algorithm:  
  11.         public static void writeStar(int n)  
  12.         {  
  13.             if(n==0)  
  14.             {  
  15.                 //base case  
  16.                 System.out.println();  
  17.             }  
  18.             else 
  19.             {  
  20.                 //recursion case  
  21.                 System.out.print(” * “);  
  22.                 writeStar(n-1);  
  23.             }  
  24.         } 


 递归结构:
  基本情况(base case) 递归情况(recursion case)
  基本情况:
    一种简单到不需要递归调用就可以直接解决的情况
  递归情况:
   一种需要把整个问题转化成为一个相同种类,比较简单的,而且可以通过递归调用
  来解决问题的情况
  
 函数调用用的是:栈内存
 主函数的运行用的是:堆内存

 


  1. 整数的幂运算:  
  2.         public static int pow(int x,int y)  
  3.         {  
  4.             if(y==0)  
  5.             {  
  6.                 //base case  
  7.                 return 1;  
  8.             }  
  9.             else 
  10.             {  
  11.                 //recursion case  
  12.                 return x*pow(x,y-1);  
  13.             }  
  14.         }  
  15.         递归解决方法过程:  
  16.         pow(3,5)  =  3*pow(3,4)  
  17.         |   pow(3,4)  =  3*pow(3,3)  
  18.         |   |   pow(3,3)  =  3*pow(3,2)  
  19.         |   |   |   pow(3,2)  =  3*pow(3,1)  
  20.         |   |   |   |   pow(3,1)  =  3*pow(3,0)  
  21.         |   |   |   |   |   pow(3,0)  =  1 
  22.         |   |   |   |   pow(3,1)  =  3*1  =  3 
  23.         |   |   |   pow(3,2)  =  3*3  =  9 
  24.         |   |   pow(3,3)  =  3*9  =  27 
  25.         |   pow(3,4)  =  3*27  =  81 
  26.         pow(3,5)  =  3*81  =  243 

当然递归对于问题的理解和提炼要求是比较高的。

我们使用递归解决的问题:

1.在数据结构中的非线性存储结构中的树,二叉树的前序遍历,中序遍历,后序遍历等问题的解决中就使用了递归算法,这样使解决问题的编码很方便。

2.遍历指定目录下的所有文件

3.二分法排序等等

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110426.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SIFT特征点提取「建议收藏」

    SIFT特征点提取「建议收藏」计算机视觉中的特征点提取算法比较多,但SIFT除了计算比较耗时以外,其他方面的优点让其成为特征点提取算法中的一颗璀璨的明珠。SIFT算法的介绍网上有很多比较好的博客和文章,我在学习这个算法的过程中也参看网上好些资料,即使评价比较高的文章,作者在文章中对有些比较重要的细节、公式来历没有提及,可能写博客的人自己明白,也觉得简单,因此就忽略了这些问题,但是对刚入门的人来说,看这些东西,想搞清楚这些是怎么

    2022年6月16日
    40
  • 基于OIDC实现单点登录SSO、第三方登录[通俗易懂]

    基于OIDC实现单点登录SSO、第三方登录[通俗易懂]OIDC联合身份认证机制背景概念1OIDC身份认证协议2基于OIDC实现SSO2.1统一登录2.1.1流程2.1.2RP相关接口2.1.3OP相关接口2.2统一登出2.2.1流程2.2.2RP需要在向OP注册时提供2.2.3RP相关接口2.2.4OP相关接口2.3持续监视2.3.1流程2.3.2RP相关接口2.3.3OP相关接口3在OIDC的SSO中集成第三方登录(…

    2022年8月30日
    4
  • ajax跨域请求结合springmvc后台代码学习整理

    ajax跨域请求,在工作中遇到使用ajax发起请求获取数据,但是请求的数据不在同一个域下,这样子就要使用到ajax的跨域请求了! 我使用的框架 SpringMVC,我在PC端的项目里面写一个接口方法,但是在wap项目中也要用改接口!下面贴出示例代码:

    2022年2月25日
    49
  • idea创建javaweb项目详解_idea怎么创建普通java项目

    idea创建javaweb项目详解_idea怎么创建普通java项目初学javaweb不用maven不用gradle手把手教你如何创建自己的JavaWeb项目文章目录1.创建项目1.创建项目file→new→project(这里不用管直接下一步,我们给项目起一个名字!)如图项目已经创建好了!…

    2022年9月20日
    2
  • 微信API接口大全「建议收藏」

    微信API接口大全「建议收藏」微信API接口1、基础消息类型1、客户端发送的心跳包HeartBeatReq=1001;2、消息接收确认回复(接收或拒绝接收)MsgReceivedAck=1002;3、错误单独提升为一种消息类型Error=1003;4、通用任务执行结果通知TaskResultNotice=1025;2、设备客户端授权类消息1、设备(手机客户端、客服客户端)获取通信token请求与响应DeviceAuthReq=1010;设备(手机客户端、客服客户端)获取通信token响应D…

    2022年10月2日
    5
  • 11.1JS笔记_数据结构手写笔记

    11.1JS笔记_数据结构手写笔记11.1JS笔记

    2022年4月20日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号