一直不能读懂javascript中的递归函数,不清楚里面的层层调用是什么逻辑?每次碰到递归函数就会晕。
比如下面一个javascript组合排序的代码,里面就是递归实现:
var arr = ['A','B','C','D',"E","F","G"];
function show(arr,num){
var resultNum = 0;
var iNow = 1;
if(num==1){
return arr.length;
}
function change(arr,iNow){
for(var i=0;i<arr.length;i++){
var result = arr.concat();
result.splice(i,1);
if( iNow == num ){
resultNum += result.length;
}else{
change(result,iNow+1);
}
}
}
change(arr,iNow+1);
return resultNum;
}
console.log(show(arr,5));
看了很多遍,都不知道它里面的实现逻辑是什么?也不知道怎么打断点分析代码,就是感觉反复调用,让人很晕,怎么办?
求javascript大神就拿上面这个例子帮忙分析下,代码逻辑怎么实现的?如果能读懂递归函数,后面再慢慢尝试写递归函数。
Eidt
谁能解释解释这个递归?
function f(m,n)
{
if(m==0)return n+1;
if(n==0)return f(m-1,1);
return f(m-1,f(m,n-1));
}
打开控制台 执行一下, 按F10 逐步执行.
某些人说调不出, 只能说头脑
逻辑性
不够. 不能怪方法不行.首先接触到一个递归, 先看函数内部
做了什么
, 看不懂, 调试一遍,看内部的不懂的函数或分支
做了什么
.在不明白, 说明你的智商只如嘲讽一般.其次这个函数目的就是算
阶乘
.!arr.length/!(arr.length - 5)
叹号为阶乘