概念
递归递归, 先递后归
递无可递, 速速归来,
急急如律令!!!
实例
- 遍历文件夹, 获取文件列表
let dirPath = "/sdcard/脚本"; let filePathList = getFilePathList(dirPath); log(filePathList); function getFilePathList(dirPath, filePathList) { filePathList = filePathList || []; var fileNameList = files.listDir(dirPath); var len = fileNameList.length; for (var i = 0; i < len; i++) { let filepath = files.join(dirPath, fileNameList[i]); if (files.isFile(filepath)) { filePathList.push(filepath); } else { // 文件夹, 继续向下递 getFilePathList(filepath, filePathList); } } // 文件遍历完成, 终止条件, 返回结果 return filePathList; }
- 斐波那契数列(Fibonacci sequence)
function fib(n) { // 终止条件 // 递的同时, 也满足归的条件 if (n == 1 || n == 2) { return 1; } // 一直往下递 return fib(n - 1) + fib(n - 2); } let r = fib(10); log(r);
- 阶乘
// ?前的1是必然终止的条件 // n====1时, 往下递, 递的同时, 满足归的条件, 直接返回 // 其他条件就一直往下递 f = (n) => (n === 1 ? 1 : n * f(n - 1)); log(f(3));
- 遍历对象属性, 打印包含runtime的属性
let myEngine = engines.myEngine(); getTheSpecifiedAttribute(myEngine); function getTheSpecifiedAttribute(obj) { for (var k in obj) { if (Object.prototype.toString.call(obj[k]) === "[object Object]") { getTheSpecifiedAttribute(obj[k]); } else { k = k.toLowerCase(); if (k.indexOf("runtime") > -1) { log({ obj: obj, k: k, }); } } } }
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途