浅谈对递归算法的理解……
时间:2019-08-30
本文章向大家介绍浅谈对递归算法的理解……,主要包括浅谈对递归算法的理解……使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
递归:
所谓递归,就是既有传递,又有回归,与其说是传递与回归,初学不如理解是一种 “循序递进”与“规律约束”。
为什么这样说,因为递归算法相比较于循环在代码结构方面个人认为更加简洁清晰,清晰易懂,递归注重的是一种有序的规律,所以在每个程序开始之前,我们只要能找到一个使程序循序递进的规律;并且在整个过程都在用此规律进行传递,但是递归算法也有很大的缺点,会造成内存空间不足,从而形成内存溢出;所以针对这种缺点,就会引入“规律约束”,在每一次算法的的开始之前,先对算法进行一个规律约束,而这种约束可以理解为一个“归期”;即到这个归期不得已而为之……
eg:1 计算1+2+3+4+……+100的值。
function fn(n){ if(n==1)return 1; //归期 return n+fn(n-1); //规律 } console.log(fn(100));
eg:2 计算n 和 1/n!的阶乘。
1. n!
function fn(n){ if(n==1)return 1; //归期 return n*fn(n-1); //规律 } console.log(fn(5));
2. 1/n!
function fn(n){ if(n==1)return 1; //归期 return 1/n*fn(n-1); //规律 } console.log(fn(5));
eg:3 斐波拉契数列(求第n个数的数值)
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987……
function fn(n){ if(n==1||n=2)return 1; //归期 return fn(n-1)+fn(n-2); //规律 } console.log(fn(8));
eg:4 编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数求/1+1/3+...+1/n
function fn(n){ if(n%2==0){ if(n<=2)return 1/2; //归期 return 1/n+fn(n-2); //规律 } if(n%2!=0){ if(n==1)return 1; //归期 return 1/n+fn(n-2); } } console.log(fn(4));
eg:5 求1!+1/2!+1/3!+...+1/n!(递归与循环的结合)
// function fn(n) { // if (n == 1) return 1; //归期 // return 1 / n * fn(n - 1); //规律 // } // console.log(fn(5));
// function fn1(n) { // var sum = 0; // for (i = 1; i <= n; i++) { // sum += fn(i); // } // return sum; // } // console.log(fn1(5))
原文地址:https://www.cnblogs.com/gzw-23/p/11437452.html
- java: web应用中不经意的内存泄露
- velocity模板引擎学习(4)-在standalone的java application中使用velocity及velocity-tools
- mac上开启ftp
- Web前端开发的四个阶段
- 使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus
- 关于把本地应用封装成windows app发布审核通不过的问题
- java并发编程学习:用 Semaphore (信号量)控制并发资源
- java并发编程学习: ThreadLocal使用及原理
- 使用Autofac IOC组织多项目应用程序
- 国内首个“人工智能与变革管理研究院”成立
- 解决WordPress缩略图插件timthumb不支持站外图片的问题
- 让 http 2来得更猛烈些吧
- SQL Server 2008基于策略的管理
- centos系统安装Python
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java常用设计模式--三种工厂模式之抽象工厂模式(Abstract Factory Pattern)
- Mongodb只读副本集如何切换到读写模式
- Java常用设计模式--策略模式(Strategy Pattern)
- Mongodb只读副本集如何切换到读写模式(下)
- 手把手带你搭建redis集群
- Jvm常量池、运行时常量池、字符串常量池理解
- 【Docker】命令使用大全
- Apache如何设置Enable Keep-Alive
- 【Docker】项目实战,部署自己的APP
- 用云开发快速构建最美AI毕业照小程序
- 13-2 vi-启动和退出
- Java中四种引用类型:强引用,软引用,弱引用,虚引用
- docker-compose搭建redis集群之哨兵模式
- docker-compose搭建redis集群之主从复制
- c/c++补完计划(七): 哨兵节点