快捷搜索:  汽车  科技

实现广度优先遍历算法实训报告(算法面试开发者必备)

实现广度优先遍历算法实训报告(算法面试开发者必备)<?php /** * 递归函数 * 遍历目录里的文件 * @param $path 目录路径 */ function listPath($path){ //读取文件夹下的目录 $items = scandir($path); //遍历文件夹 foreach($items as $item){ //判断是否为系统隐藏的文件.和.. 如果是则跳过,防止无限循环再这里。 if($item=='.' || $item=='..'){ continue; } //子目录路径 $path_child = $path.'/'.$item; //如果是目录则递归调用 if(is_dir($path_child)){ listPath($path_child);//因为是文件夹所以再次调用自己这个函数,把这个文件夹下的文件遍历出来 //如果是文件夹则输出文件夹名字

适合的读者:学生;初级程序员

前言

程序设计本质上是为了解决生产中的问题,而有时候我们面临的问题无法用有限的数学公式来解决,比如树形目录、无限分类等等,类似这种问题,用递归函数来解决就方便多了。

那什么是递归呢?“在程序设计中,过程或函数直接或者间接调用自己,就被称为递归调用。”其实递归说白了就是调用自己,直到问题解决或者达到调用上限。有些同学可能觉得晦涩难懂,没关系,我们通过编程实践来帮助理解,为了方便大家直接复制运行,下面的例子包含JavaScript、Python、PHP、Java四种热门语言。

【JavaScript】无限分类

假设我们不知道分类到底有多少级,现在我们要将后端传来的数组遍历以后渲染到页面上。

<div id="menu"></div> <script type="text/javascript"> //这是一个多级分类 假设我们不知道每个分类到底有多少层子分类 var items = [{name: '分类1' childs: [{name: '分类11' childs: [{name: '分类111' }]} {name: '分类12' childs: [{name: '分类121' } {name: '分类122' childs: [{name: '分类1221'}]}]}]} {name: '分类2' childs: [{name: '分类21'}]}] /** * 递归函数 * 该函数的作用是:遍历当前层的分类时,判断每个分类是否有下层分类,有的话则调用自己继续遍历下层分类,直到最底层 * @param {Array} childs */ function getTree(childs){ var tree = '<ul>' for (var i in childs) { //拼装分类 var li = '<li>' childs[i].name //如果有子分类则继续递归调用 if(childs[i].childs && childs[i].childs.length > 0){ //调用自身 返回子分类的内容 li = li getTree(childs[i].childs) } li = li '</li>' tree = tree li } tree = tree '</ul>' return tree; } //将递归出来的结果渲染到menu元素 document.getElementById('menu').innerHTML = getTree(items) </script>

实现广度优先遍历算法实训报告(算法面试开发者必备)(1)

执行结果

【Python】遍历目录

假设我们不知道文件夹有多少级子目录,现在我们要遍历文件夹将文件夹里的文件路径全部打印出来。

import os def listPath(path): ''' 递归函数 遍历目录里的文件 :param path:目录路径 ''' #遍历文件夹 items = os.listdir(path) for item in items: #子目录路径 path_child = '{}/{}'.format(path item) #如果是目录则递归调用 if os.path.isdir(path_child): listPath(path_child) #因为是文件夹所以再次调用自己这个函数,把这个文件夹下的文件遍历出来 #如果是文件夹则输出文件夹名字 else: print(path_child) listPath('./')

实现广度优先遍历算法实训报告(算法面试开发者必备)(2)

执行结果

【PHP】遍历目录

假设我们不知道文件夹有多少级子目录,现在我们要遍历文件夹将文件夹里的文件路径全部打印出来。

<?php /** * 递归函数 * 遍历目录里的文件 * @param $path 目录路径 */ function listPath($path){ //读取文件夹下的目录 $items = scandir($path); //遍历文件夹 foreach($items as $item){ //判断是否为系统隐藏的文件.和.. 如果是则跳过,防止无限循环再这里。 if($item=='.' || $item=='..'){ continue; } //子目录路径 $path_child = $path.'/'.$item; //如果是目录则递归调用 if(is_dir($path_child)){ listPath($path_child);//因为是文件夹所以再次调用自己这个函数,把这个文件夹下的文件遍历出来 //如果是文件夹则输出文件夹名字 }else{ echo $path_child."\r\n"; } } } listPath('./');

实现广度优先遍历算法实训报告(算法面试开发者必备)(3)

执行结果

【Java】遍历目录

假设我们不知道文件夹有多少级子目录,现在我们要遍历文件夹将文件夹里的文件路径全部打印出来。

import java.io.File; public class Main { public static void main(String[] args) { listPath(new File("./")); } /** * 递归函数 * 遍历目录里的文件 * @param path 目录路径 */ protected static void listPath(File path){ //遍历文件夹 File[] items=path.listFiles(); for ( File item : items) { //如果是目录则递归调用 if(item.isDirectory()) { listPath(item); //因为是文件夹所以再次调用自己这个函数,把这个文件夹下的文件遍历出来 //如果是文件夹则输出文件夹名字 }else { System.out.println(item); } } } }

实现广度优先遍历算法实训报告(算法面试开发者必备)(4)

执行结果

总结

递归算法在日常的生产开发中还有很大的用处,大家要好好记住递归算法哦。

我是搞技术的庄大叔,以上内容如果有误,请广大条友指正。

猜您喜欢: