递归算法的使用:

简介: 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))
      }
    }
  }
}
相关文章
|
5月前
|
存储 算法
递归算法
递归算法
37 0
|
9天前
|
算法
递归算法练习
递归算法练习
8 0
|
6月前
|
机器学习/深度学习 人工智能 算法
深入理解递归算法
概述 定义 计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集 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
18 0
|
9月前
递归和非递归分别实现求第n个斐波那契数
递归和非递归分别实现求第n个斐波那契数
41 0
|
10月前
非递归实现二叉树遍历
非递归实现二叉树遍历
35 0
|
11月前
|
存储 算法 JavaScript
算法系列-二叉树遍历(非递归实现)
在内卷潮流的席卷下,身为算法小白的我不得不问自己,是否得踏上征程,征服这座巍巍高山。 从零开始,终点不知何方,取决于自己可以坚持多久。 希望你可以和我一样,克服恐惧,哪怕毫无基础,哪怕天生愚钝,依然选择直面困难。
|
机器学习/深度学习 算法 前端开发
递归算法使用
通常递归算法可以将一个问题的重复调用进行分解,将其分解成一个多次调用,最终完成筛选或者需要的数据。比如我们常见的斐波那契数列就是这样的: 0、1、1、2、3、5、8、13、21、34这样的递归数据,可以通过此来总结出它的数学公式规律:F(n) = F(n-1) + F(n-2)的这个过程就是是借助上面的F(0)和F(1)的结果来进行递推的,这个过程在数学上是一个数列的递推公式,在高中我们学过的数列上。我还记得当时求解递推公式可以使用函数方程,而函数方程的思想想想其实是借助了微分方程逆推得到积分方程的过程,或者说是采用不动点法可以实现这一求解的过程。这个过程,在我看到高等数学的时候才明白,现在想
159 0
递归算法使用
汉诺塔(递归+ 非递归版)
汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上, 有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下:
177 1
汉诺塔(递归+ 非递归版)
|
机器学习/深度学习
用递归和非递归实现斐波那契数列
用递归和非递归实现斐波那契数列
150 0
用递归和非递归实现斐波那契数列