arguments.callee 实现函数递归调用
arguments.callee 使用
使用辗转反侧法计算两个数的最大公约数时,有一个代码是这样的
function gcd(a, b) {if (a % b === 0) {return b;}return arguments.callee(b, a % b);
}
console.log(gcd(28, 12)); // 4
console.log(gcd(7890, 123456)); // 6
console.log(gcd(5, 13)); // 1 (公约数为1说明两数互质)
其中 arguments.callee 不会经常使用,查询资料如下:
Arguments 表示函数的参数。arguments 有一个属性 cellee 表示函数参数的指针(指向当前的函数)那么这样写相当于递归调用函数。
我们使用这个优化一下斐波那契函数:
下面是原函数
function factorial(num){ if (num <=1) { return 1; } else { return num * factorial(num-1) }
}
后面是转换后的函数
function factorial(num){ if (num <=1) { return 1; } else { return num * arguments.callee(num-1);}
}
使用 argument.callee 的好处:函数内部实现自行递归,不需要获取函数名。如果对外的函数名修改了,不需要改动函数内部的逻辑。
arguments.callee 实现函数递归调用相关推荐
- C语言程序设计 函数递归调用示例
函数递归调用示例(教材习题5.3,运行结果012345) #include<stdio.h> void fun(int k); void main() { int w=5; fun ...
- androidstudio调用系统相机为什么resultcode一直返回0_函数递归调用?看这文就够了...
作者 | Cooper Song 责编 | Elle 出品 | 程序人生(ID:coder_life) 我猜,大多数程序员第一次接触函数的递归调用都是在算斐波那契数列某项值的时候,这是函数递归调用最常 ...
- python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数
1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...
- 函数递归调用?看这文就够了!
作者 | Cooper Song 责编 | Elle 出品 | 程序人生(ID:coder_life) 我猜,大多数程序员第一次接触函数的递归调用都是在算斐波那契数列某项值的时候,这是函数递归调用最常 ...
- 41 JS函数递归调用
文章目录 1.概念 2.应用 3.案例:求斐波那契数列第N项的值 1.概念 递归调用是函数嵌套调用中一种特殊的调用.它指的是一个函数在其函数体内调用自身的过程,这种函数称为递归函数. 2.应用 下面以 ...
- C语言函数递归调用实验报告,C语言函数的递归和调用实例分析
一.基本内容: C语言中的函数可以递归调用,即:可以直接(简单递归)或间接(间接递归)地自己调自己. 要点: 1.C语言函数可以递归调用. 2.可以通过直接或间接两种方式调用.目前只讨论直接递归调用. ...
- 【函数递归调用】递归调用经典问题—汉诺塔问题
1.函数的递归调用 函数可以直接或者间接的调用其自身,这称为函数的递归调用.递归算法的实质是将原有的问题逐层拆解为新的问题,而解决新的问题又用到了原问题的解法,因此可以继续调用自身分解,按照此原则一直 ...
- 在c语言中允许函数递归调用,c语言允许函数的递归调用吗
c语言允许函数的递归调用吗 允许.C语言中的函数直接或间接调用自己的过程叫递归. 一.递归的两个必要条件 1.存在限制条件,当满足这个条件时,递归便不再继续. 2.每次递归调用之后越来越接近这个限制条 ...
- 【C语言】函数嵌套的调用 函数递归调用
一.两种函数调用的方法. 1.可以嵌套调用函数在调用一个函数的过程中,又调用另一个函数. 例:add(add(a,b),c); 2.可以在函数的定义中调用另一个函数. //加函数 int ...
最新文章
- React.js 小书 Lesson27 - 实战分析:评论功能(六)
- php一次性执行多条sql_PHP循环执行多条SQL
- python笔记-python编程优化:常用原则和技术介绍
- zabbix专题:附加 zabbix配置文件详解
- 64位内核第三讲,Windbg的使用.以及命令
- 使用uiautomation 实现微信自动发送消息
- Python 面向对象版学员管理系统
- 安卓手机安装软件提示存储空间不足的解决方法
- 微信小程序身份证扫描OCR(信息自动带入)
- FPGA:偶分频、奇分频
- C++ Boost库:简介和第一个示例程序
- 【cocos2d-x入门实战】微信飞机大战之十四:背景音乐和音效
- 机器学习算法优缺点总结
- 机器学习回归之商品x的网络消费购买预测实例(sklearn)包含数据集的训练与预测
- 金融投资之重要财务指标 (From Corporate Finance, 6th Edition) 与Tushare数据接口
- 把D盘的Program Files文件夹删除
- 纯JavaScript入门级小游戏:兔子抢金币(附演示地址+源码)
- Creo 二次开发-尺寸位置排序算法
- 安装不文件不完全_【不完全IT】第4期 安卓刷机
- 2022年,我的年终总结
热门文章
- JCheckBox 默认选择_电脑扬声器无法设置默认设备
- 米拓MetInfo 7.0去底部版权信息Power by方法
- 计算机组成补码的左移,计算机组成原理 移位运算
- 睡眠期间人类海马体中缓慢振荡、纺锤波和波纹的分层嵌套
- 2008年首都机场大巴路线时刻表
- Upload filetype not allow
- [唯一索引允许为空]的说法是不严谨的
- 苹果x与苹果xs的区别_苹果x突然黑屏但没有关机
- 用wxpython 制作出入库 进销存 ERP 仓库管理系统 可导出Excel
- 使用 mulan-1.5.0 如何构造.arff文件