啥叫递归
聊递归之前先看一下什么叫递归。
递归,就是在运行的过程中调用自己。
构成递归需具备的条件:
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
递归语言例子
我们用2个故事来阐述一下什么叫递归。
1,从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”
2,大雄在房里,用时光电视看着从前的情况。电视画面中的那个时候,他正在房里,用时光电视,看着从前的情况。电视画面中的电视画面的那个时候,他正在房里,用时光电视,看着从前的情况……
接下来看一下代码吧
<script>
//json数据传输
let data;
let xhr = new XMLHttpRequest();
xhr.open('get', 'js/树形菜单.json');
xhr.send();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
let text = xhr.responseText;
data = JSON.parse(text);
show(data);//调用传参
// console.log(data);
}
}
//获取元素
let box = document.getElementsByClassName('box')[0];
//设置一个变量为空
let str = '';
// 设置变量默认为真
let statuss = true;
function show(data) {
//判断如果是真
if (statuss) {
//拼接ul
str += '<ul>';
//否则让ul隐藏
} else {
str += '<ul style="display:none">';
}
//循环数据
for (let i = 0; i < data.length; i++) {
//拼接type里的内容
str += '<li>' + data[i].type + '</li>';
//判断是不是元素的子元素
if (data[i].children) {
//是的话变量为false
statuss = false;
//自调用函数
show(data[i].children);
//否则拼接ul标签
} else {
str += '<ul></ul>';
}
// str += '</li>';
}
//闭合标签
str += '</ul>';
//输出到页面中
box.innerHTML = str;
// console.log(str);
//返回str的值
return str;
}
// let box = document.getElementById("box");
box.addEventListener("click", function(e) {
let targets = e.target;
console.log(targets);
if (targets.nodeName === "LI") {
let nexts = targets.nextElementSibling;
if (nexts.nodeName === "UL") {
if (nexts.style.display == "none") {
nexts.style.display = "block";
} else {
nexts.style.display = "none";
}
}
}
})
</script>
由于我是写的json假数据,所以没有结构和样式哦~,样式就是数组包对象,对象里面再包数组对象这样写,页面只需要一个空 div就可以哦家人们!