迭代和递归区别。es6 尾递归
今天在学尾递归的时候,突然发现自己可能不太知道迭代是啥意思了,害!还是自己基本功太不扎实了,铁废物,因为最近在准备工作的东西,所以会有前端知识输出,当然我不会去输出一些基本知识,因为我的csdn还是喜欢输出一些,我一下子不太了解的东西,然后去查去解决的问题。接下来进入正题!
递归大家都知道,是在函数里面调用自身。比如下面的代码:
function Fibonacci (n) {if ( n <= 1 ) {return 1};return Fibonacci(n - 1) + Fibonacci(n - 2);
}
我今天在学es6的时候了解到一点,当代码在调用函数的时候,会在内存里面创建一个调用帧,所以,递归就是,不断的创建调用帧,形成调用栈,栈的概念,就先不给大家介绍了,总的来说就是,先进后出,很符合递归,(队列是先进先出)。es6里面有一个概念是尾递归,就是在函数的最后调用自身,这样的话它就会删除外部调用(前一次调用)的调用帧。节省内存空间。
function Fibonacci2 (n , ac1 = 1 , ac2 = 1) {if( n <= 1 ) {return ac2};return Fibonacci2 (n - 1, ac2, ac1 + ac2);
}
这个函数就是尾递归。现在尾调用优化,只有safari中有。
那回归正题,迭代是什么呢?
public static int FibonacciD(int num) {if(num <= 0) {return 0;}if(num == 1 || num == 2) {return 1;}int first = 1,second =1,third = 0;for(int i = 3; i<= num ;i++) {third = first + second;first = second;second = third;}return third;}
不用函数调用,用循环解决斐波那契数列问题,这个就是迭代。
迭代和递归区别。es6 尾递归相关推荐
- 迭代和递归的理解和区别
最近做一些题经常会碰到迭代的方法解的,或者递归解法,容易搞混,特在此整理一下 一.递归: 由例子引出,先看看递归的经典案例都有哪些 1.斐波那契数列 斐波纳契数列,又称黄金分割数列,指的是这样一个数列 ...
- 一次看懂迭代与递归的区别
文章目录 前言 一.介绍概念 二.总结 前言 偶然看到了迭代与递归,抱着学习的心态去百度了各种答案,什么函数关系什么代码看的是一头雾水,于是在半个小时的努力下终于搞懂了递归与迭代的区别,在这里分享给各 ...
- 迭代和递归的关系和区别
迭代和递归的关系和区别(敲黑板) 从概念上讲,递归就是指程序调用自身的编程思想,即一个函数调用本身:迭代是利用已知的变量值,根据递推公式不断演进得到变量新值的编程思想.简单地说,递归是重复调用函数自身 ...
- 递归和迭代_迭代与递归
很多编程小白都会遇到'迭代'和'递归'的问题(包括我自己),大部分同学还是不知道迭代与递归的区别.下面我就尝试用最通俗易懂的模式讲解递归与迭代的区别. 1.迭代: 迭代其实很简单,我们在编程中经常用到 ...
- Java中的迭代与递归
递归 提到迭代,不得不提一个数学表达式: n!=n*(n-1)*(n-2)*...*1 有很多方法来计算阶乘.有一定数学基础的人都知道n!=n*(n-1)!因此,代码的实现可以直接写成: 代码一 in ...
- 【算法】递归:递归优化之尾递归
[算法]递归:递归优化之尾递归 引言:在以往我发过一篇过于通过分析法去理解递归求解递归的博客文章,那篇文章主要介绍了如何去求解递归问题.而在这篇文章中,我会介绍一下如何去优化递归,顺带还会去分析一下递 ...
- 【思维风暴】算法迭代和递归的理解
文章目录 递归与迭代 递归消耗内存的缺点 为什么要有迭代 需要用迭代消解递归的情况 不需要消解的递归 结束语 递归与迭代 递归与迭代都是基于控制结构:迭代用重复结构,而递归用选择结构.递归与迭代都涉及 ...
- java递归和迭代_Java中的迭代与递归
递归 提到迭代,不得不提一个数学表达式: n!=n*(n-1)*(n-2)*...*1 有很多方法来计算阶乘.有肯定数学基础的人都知道n!=n*(n-1)!因而,代码的实现可以直接写成: 代码一 in ...
- 迭代与递归:To Iterate,Human; to Recurse, Divine.
引言 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?「从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?『从前有座山,山里有座庙,庙里有个老和尚 ...
最新文章
- java注释 param_java注释文档(下)
- openshift4离线部署_OpenShift 4.2 离线安装补充记录
- 江西职业教育集团计算机应用竞赛,【喜报】江西工业职院电子与信息工程学院学生在计算机应用竞赛钟喜获佳绩...
- Vue.js 入门案例
- 使用Latex制作分享,演讲,Presentation用的Slides,PPT——Beamer教程
- 并行程序设计---cuda memory
- Boost库异步IO
- PHP程序员简历模板
- 算法分析与设计——分治法实验报告
- 安卓电子书格式_(干货)mobi电子书,没有Kindle也能读?
- 表格列宽怎么设置?(excel表格)
- android简单计算器源码
- crypto-j(攻防世界)
- AirTest 基本使用及框架浅剖析——五分钟上手制作游戏辅助
- 【APICloud系列|15】上架ios应用到苹果应用市场总结
- 安卓沉浸式状态栏_安卓平板也能有品质感,小新Pad Pro上手
- GS1011无线模块的使用简介。
- 【UBUNTU】使用Remmina访问远程linux服务器桌面
- 函数式语言的宗教——王垠
- 基于机器学习进行多阶段全零块检测
热门文章
- git登录账号密码错误remote: Incorrect username or password (access token)
- UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xf9 in position 56: illegal multibyte sequence
- 使用MySQL数据库
- OA系统行业解析:中小企业实施OA系统的意义
- 【论文导读】Stable Learning via Sparse Variable Independence
- 智能车竞赛技术报告 | 节能信标组 - 浙江大学 - 浙大三队
- Eclipse中syso 快捷键 Alt + / 不能使用的问题
- Windows平台下,IDEA通用基本配置(基本覆盖所有常见配置)
- 利用HttpURLConnection抓取网页取名
- 工信部印发互联网+行动计划 聚焦智能制造