前端的一道面试题,关于:“编写一个递归版本的 reverse(s) 函数,以将字符串s倒置。”
01
分 析
功能:字符串s倒置(倒序)
方法:递归
分析:
若将字符串"hello",实现倒置;先将每一位放到倒数第一位,然后,将第一位放到倒数二,依次交换,直到倒数位和第一位为同一位结束;
如下:
var str = "hello"; //olleh
elloh 第一位,放到倒数第一 交换4
lloeh 第一位,放到倒数第二 交换3
loleh 第一位,放到倒数第三 交换2
olleh 第一位,放到倒数第四 交换1
02
递归实现
分析:
1、方法接受两个参数,arr,len
arr:数组类型,即将字符串将成的数组
len:长度,控制数组交换顺序的次数
2、如果len长于1,小于len-1,则对数组的值进行换行;可实现将数组第一位的值,放到 len 对应的位置上
3、执行完1,2后,len--; 继续调用此方法changeStr(arr,len);
注:函数不需要返回值,因为arr是数组,即为引用类型,它的改变了,原实参也会发生改变;
代码如下:
/**
* arr:字符串数组
* len:长度
*/
function changeStr(arr,len){
if(len>1){
for(var i=0;i<len-1;i++){
var temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
len--;
changeStr(arr,len);
}
}
03
完整Demo
下面写了一个完整Demo,对上面的方法进行测试,测试通过;
代码如下:
<script type="text/javascript">
var str = "bugshouji.com";
var re = reverse(str);
console.log(re);
function reverse(s){
var arr = s.split("");
changeStr(arr,arr.length);
return arr.join("");
}
/**
* arr:字符串数组
* len:长度
**/
function changeStr(arr,len){
if(len>1){
for(var i=0;i<len-1;i++){
var temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
len--;
changeStr(arr,len);
}
}
</script>