递归算法的使用:

简介: package algorithmimport java.io.Fileobject RecursiveApp { def main(args: Array[String]): Unit = { "...
package algorithm

import java.io.File


object RecursiveApp {

  def main(args: Array[String]): Unit = {

    """
      |递归的使用:适合于树形结构的遍历
      |比较递归方式和循环方式的区别
    """.stripMargin
    var s0 = System.currentTimeMillis()
    val res: Int = fabonacciNumber(30)
    println(res)
    println("recuise ops cost time "+(System.currentTimeMillis()-s0)/100+"s")

    var s1 = System.currentTimeMillis()
    println(fabonacci_ori(30))
    println("original ops cost time "+(System.currentTimeMillis()-s1)/100+"s")
    val path = "C:\\Users\\Administrator\\Desktop\\test\\NIFI"
    val file = new File(path)
    getFileList(file)
  }

  /**
    * 斐波那契数的递归实现
    * @param n
    * @return
    */
  def fabonacciNumber(n:Int):Int={

    if(n==1||n==2){
      return 1
    }else{
      fabonacciNumber(n-1) + fabonacciNumber(n-2)
    }
  }


  /**
    * 斐波那契数的循环实现
    * @param n
    * @return
    */
  def fabonacci_ori(n:Int):Int={
    var num1 = 1
    var num2 =1
    var fac = 0
    for(i <- 2 until(n)){
      fac = num1  + num2
      num1 = num2
      num2 = fac
    }
    fac
  }


  /**
    * 使用递归方式遍历某个文件名称信息
    * @param file
    */
  def getFileList(file:File){

    val files: Array[File] = file.listFiles()
    for(i <- 0 until(files.length)){
      if(files(i).isFile()){
        println(files(i).getName())
      }else{
        getFileList(files(i))
      }
    }
  }
}
相关文章
|
16天前
|
存储 算法
递归算法
【10月更文挑战第11天】递归算法是一种强大而又具有挑战性的算法技术。通过深入理解和掌握递归的原理、应用以及优化方法,我们可以更好地利用它来解决各种问题,并在编程实践中发挥其独特的优势。同时,我们也要注意递归算法可能带来的性能和栈空间问题,通过合理的设计和优化来提高算法的效率和稳定性。
16 1
|
6月前
|
算法
递归算法实现二分查找
本文简要介绍了递归实现的二分查找算法,这是一种在有序列表中快速查找的策略。递归方法虽在实际应用中较少,但有助于理解递归思想,为学习数据结构中的树内容打下基础。文中提供了原版和递归版本的二分查找代码,并强调了递归算法中处理未找到情况的注意事项。此外,还提到了递归在解决复杂问题时的优势,并通过链接分享了一个关于递归实现素数判断的例子。
82 2
|
机器学习/深度学习 人工智能 算法
深入理解递归算法
概述 定义 计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集 In computer science, recursion is a method of solving a computational problem where the solution depends on solutions to smaller instances of the same problem. 比如单链表递归遍历的例子: void f(Node node) { if(node == null) { return; } print
63 0
|
6月前
|
算法
递归算法练习
递归算法练习
34 0
递归和非递归分别实现求第n个斐波那契数
递归和非递归分别实现求第n个斐波那契数
59 0
|
存储 算法 JavaScript
算法系列-二叉树遍历(非递归实现)
在内卷潮流的席卷下,身为算法小白的我不得不问自己,是否得踏上征程,征服这座巍巍高山。 从零开始,终点不知何方,取决于自己可以坚持多久。 希望你可以和我一样,克服恐惧,哪怕毫无基础,哪怕天生愚钝,依然选择直面困难。
|
机器学习/深度学习 算法 前端开发
递归算法使用
通常递归算法可以将一个问题的重复调用进行分解,将其分解成一个多次调用,最终完成筛选或者需要的数据。比如我们常见的斐波那契数列就是这样的: 0、1、1、2、3、5、8、13、21、34这样的递归数据,可以通过此来总结出它的数学公式规律:F(n) = F(n-1) + F(n-2)的这个过程就是是借助上面的F(0)和F(1)的结果来进行递推的,这个过程在数学上是一个数列的递推公式,在高中我们学过的数列上。我还记得当时求解递推公式可以使用函数方程,而函数方程的思想想想其实是借助了微分方程逆推得到积分方程的过程,或者说是采用不动点法可以实现这一求解的过程。这个过程,在我看到高等数学的时候才明白,现在想
187 0
递归算法使用
汉诺塔(递归+ 非递归版)
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上, 有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下:
232 1
汉诺塔(递归+ 非递归版)