JavaScript 递归(栈结构/化归思想)
2017-03-07 12:22
465 查看
递归
(1)概念:函数自己调用自己
(2)问题存在:容易出现死递归,是循环的递归下去,内存不够就报错:栈溢出
栈结构
特点:先入后出
(3)递归要实现需要解决两个问题
1> 停止的条件(解决栈溢出)
2> 如何调用自己
(4) 化归的思想(转化为已归纳好的办法):
对问题进行变形、转化,转换成已经解决的问题,然后直接调用解决好的方法即可。
所谓的递归其实就是化归。
(5)如何写递归?
1> 假设这个问题已经解决,即使写一个空函数也假设已经解决
2> 根据规律(可能要写两到三次),写出化归的表达式,即递归体
3> 确定临界条件
案例:求1,3,5,7,...第n项的值,从0开始
(1)概念:函数自己调用自己
(2)问题存在:容易出现死递归,是循环的递归下去,内存不够就报错:栈溢出
//1.直接调用自己 function foo1(){ foo1(); } foo1();
//2.间接调用自己 function foo2(){ foo3(); } function foo3(){ foo4(); } function foo4(){ foo2(); } foo2();
栈结构
特点:先入后出
function f1(){ f2(); console.log('f1 finish'); } function f2(){ f3(); console.log('f2 finish'); } function f3(){ console.log('f3 finish'); } f1();//f3 finish f2 finish f1 finish //将函数调用称为调用栈
(3)递归要实现需要解决两个问题
1> 停止的条件(解决栈溢出)
2> 如何调用自己
(4) 化归的思想(转化为已归纳好的办法):
对问题进行变形、转化,转换成已经解决的问题,然后直接调用解决好的方法即可。
所谓的递归其实就是化归。
(5)如何写递归?
1> 假设这个问题已经解决,即使写一个空函数也假设已经解决
2> 根据规律(可能要写两到三次),写出化归的表达式,即递归体
3> 确定临界条件
案例:求1,3,5,7,...第n项的值,从0开始
//1> 假设问题已经解决,肯定需要一个函数,带有一个参数,返回一个结果 function foo(n){ } //2> 要求第n项,根据规律就是 第n-1项 + 2 就是要求 第n-1项,即 foo(n-1) 就是结果 因此得到函数体(递归体) function foo(n){ return foo(n-1) + 2; } //3> 确定临界条件,就是在第0项的时候,值为1 function foo(n){ if(n==0) return 1; return foo(n-1) + 2; }
/* * 练习1:求1,2,4,8,16, ...第n项的值,从0开始 * */ /*1.假设问题已解决,需要一个带参的函数,有返回值*/ function foo(n){ /*3.临界条件:第0项时值为1*/ if(n==0) return 1; /*2.规律是第n-1项乘以2*/ return foo(n-1)*2; } /* * 练习2:求1到n的和 * */ function foo2(n){ if(n==1) return 1; return foo2(n-1)+n; } /* * 练习3:fibonacci数列,求第n项 * */ function foo3(n){ if( n==1 || n==2 ) return 1; return foo3(n-1)+foo3(n-2); } /* * 练习4:求阶乘 * */ function foo4(n){ if(n==1) return 1; return foo4(n-1)*n; } /* * 练习5:求幂,就是n的m次方 * */ function foo5(n,m){ if(m==0) return 1; return foo5(n,m-1)*n; }
相关文章推荐
- 递归是一种算法结构,回溯是一种算法思想
- 【数据结构与算法】深入浅出递归和迭代的通用转换思想
- Javascript利用递归生成企业部门树结构
- JavaScript结构三层——思想快速介绍
- 采用二叉链表结构实现二叉树,并以递归遍历思想实现二叉树的创建、二叉树的遍历(先序、中序、后序和层次遍历)
- javascript如何用递归写一个简单的树形结构
- 【数据结构与算法】深入浅出递归和迭代的通用转换思想
- javascript如何用递归写一个简单的树形结构
- JavaScript递归方法 生成 json tree 树形结构数据
- javascript如何用递归写一个简单的树形结构示例
- 读取指定目录下文件-- ---LIST+递归。(跳出结构思想。利用数据结构思路+程序写出更简单的逻辑。)
- javascript如何用递归写一个简单的树形结构
- javascript如何用递归写一个简单的树形结构示例
- JavaScript递归方法 生成 json tree 树形结构数据
- javascript+css简单实现树形结构列表
- 用递归在Dropdownlist中显示树状结构(连数据库)
- 利用JavaScript 动态生成 树形结构
- 用递归在Dropdownlist中显示树状结构
- javascript实现表现、结构、行为分离的选项卡效果!
- 递归的方法画树形结构