
一、题目描述💯
- 一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
二、思路分析🤔
- 1.实现递归函数getAndRemoveLastElement,获取到栈底元素返回并移除
- 2.再实现一个递归函数reverse,逆序一个栈,将获取的栈底元素压入到栈中
三、代码实现🌂
function getAndRemoveLastElement(stack){
let result = stack.pop()
if(stack.length == 0){
return result
}else{
let last = getAndRemoveLastElement(stack)
stack.push(result)
return last
}
}
function reverse(stack){
if(stack.length == 0){
return;
}
let i = getAndRemoveLastElement(stack);
reverse(stack)
stack.push(i)
}
四、简单测试🧪
var {Logarithm} = require('./Logarithm')
function arrayReve(stack){
stack.reverse()
}
Logarithm(100,reverse,arrayReve)
五、简单对数器实现(建议收藏使用)🔥
function getResult(stack,funName){
funName(stack)
return stack
}
function Logarithm(num,compareOne,compareTwo){
let arr = []
for(let i = 0;i<num;i++){
let numItem = parseInt(i *Math.random()*10)
arr.push(numItem)
}
let arr2 = getResult(arr,compareTwo);
let arr1 = getResult(arr,compareOne)
let falseArr = []
let k = 0
let j = 0
for(let i = 0,j=0,k=0;i<arr1.length;i++){
if(arr1[i]==arr2[i]){
j++
process.stdout.write('√')
}else{
k++
process.stdout.write('❌',k)
falseArr.push(arr1[i])
}
}
console.log(`结束`)
console.log('------------------------------------------------')
console.log(`本次测试用例是`)
console.log(`${arr}`)
console.log(`测试1函数的实验结果是`)
console.log(`${arr1}`)
console.log(`测试2函数的实验结果是`)
console.log(`${arr2}`)
console.log(`本次测试共测试${num}组,发生错误${k}组。`)
}
module.exports = {Logarithm};
感谢🙇