递归

递归与尾递归 在计算机科学领域中,递归式通过递归函数来实现的。程序调用自身的编程技巧称为递归( recursion)。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。 一般来 阅读详情

*本文来自《javaScript高级程序设计》的学习笔记


递归函数是在一个函数内部通过名字调用自身的情况下构成的

例如:

//####################Test01 begin#################
function factorial(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * factorial(num - 1);
    }
}
var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4));
//####################Test01 end#################
/**
 * 以上代码先把factorial()函数保存在变量anotherFactorial中;
 * 然后将factorial置为null,结果指向原始函数的引用只剩下一个;
 * 在接下来调用anotherFactorial()时,由于必须执行factorial(),而factorial已经被置为null,不再是函数,所以就会导致错误
 * 在这种情况下,使用arguments.callee 可以解决这个问题。
 * arguments.callee 是一个指向正在执行的函数的指针,因此可以用它来实现对函数的递归调用,例如:
 */
//####################Test02 begin#################
function factorial2(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * arguments.callee(num - 1);
    }
}
var anotherFactorial2 = factorial2;
factorial2 = null;
alert(anotherFactorial2(4));
//####################Test02 end#################
/**
 *在严格模式下,不能通过脚本访问arguments.callee,访问这个属性会导致报错。
 *这种情况下可以使用命名函数表达式来达成相同的结果,例如:
 */
//####################Test03 begin#################
var factorial3 = (function f(num) {
    if (num <= 1) {
        return 1;
    } else {
        return num * f(num - 1);
    }
});
var anotherFactorial3 = factorial3;
factorial3 = null;
alert(anotherFactorial3(4));
//####################Test03 end#################
*个人认为没有必要搞得这么复杂,正常是不会把已经声明的一个函数置为null

浅谈普通递归和尾递归 [举例(计算阶乘)] #include<stdio.h> /* 用尾递归思想计算阶乘 */ unsigned long Fact(unsigned int n, unsigned long a) { if(n == 0 || n == 1) { return a; } else { a = a * n; return Fact(n - 1, a); } } /* */ int main()... 阅读详情

相关推荐

用AnythingLLM搭建私人RAG知识库:从入门到实战调优指南

大型语言模型虽然知识渊博,但无法触达私有文档中的具体内容,这正是检索增强生成(RAG)技术的核心价值所在。RAG通过先将文档切块并向量化,再在提问时检索最相关的片段拼接给模型,让AI基于指定资料精准回答,无需昂贵的模型微调。这种架构不仅让知识更新即时生效,还大幅降低了私有化部署的门槛。在实际工程中,RAG的落地需要合理选择嵌入模型、设计分块策略并调优检索参数,才能避免答非所问。对于个人或小团队,使用开源工具搭建本地知识库是最省心的路径,其中AnythingLLM以其开箱即用的特性,成为连接向量检索与模型推理

weixin_29062671的博客 230

递归算法以及应用场景

数组或者对象层级嵌套很多层,具体不确定多少层 后台有时候会返回来数组,但是数组是有层级关系的,你可以通过parentId这种字段转成树,树转数组反过来 递归:你打开面前这扇门。你走过去,发现手中的钥匙还可以打开它,你推开门,发现里面还有一扇门,你继续打开它。若干次之后,你打开面前的门后,发现只有一间屋子,没有了门。然后,你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你可以回答你到底用这把钥匙打开了几扇门。 循环:你打开面前这扇门,看到屋里面还有一扇门。你走过去,发现手中的钥匙还可以打开它,

qq_40055200的博客 1501

极验第四代滑块验证码破解(三):滑块轨迹构造

极验第四代滑块验证码破解(三):滑块轨迹构造声明 声明 原创文章,请勿转载! 本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。 本文关联文章超链接:

帯泪的鱼的博客 8624

18442 偷懒的士兵2 (c++) (递归算法的应用)

18442 偷懒的士兵2 Description 有N个士兵站成一队列, 现在需要选择几个士兵派去侦察。 为了选择合适的士兵, 多次进行如下操作: 如果队列超过三个士兵, 那么去除掉所有站立位置为奇数的士兵, 或者是去除掉所有站立位置为偶数的士兵。直到不超过三个战士,他们将被送去侦察。现有一个“聪明”的士兵, 经常通过选择站在合适的初始位置,成功避免被选中去侦察。这引起了陈教官的注意。陈教官希望...

weixin_43692948的博客 1959

Ollama安装教程

Ollama 是一个开源的大语言模型(LLM)部署工具,专为在本地机器部署和运行大模型而设计,通过简单的命令就可以在本地快速运行大模型(如DeepSeek、Llama、Gemma、QWQ等)。非常适合开发者、研究人员以及对数据安全和隐私有较高要求的企业和用户

学习AI应用开发,分享AI干货、获取最新AI咨询 3857

小曾WRF自学日记(3)渐入佳境 ——WRF实例-数据下载与WPS前处理

ww

weixin_46297571的博客 1480

递归及典型应用

递归是一种方法调用自身的编程技术。数学本质是数学归纳方法。接下来我们介绍一些典型的递归应用案例,用以帮助理解,欢迎批评指正。 1.三角数字   古希腊数学家发现数字1,3,6,10,15,21,….中存在一种联系。及这个数列中第n项是由第n-1项加n得到,n>1。这个序列中的数字被称为三角数字,因为它们可以被形象化地表示成对象的一个三角排列。         图1 三角数字

iamwiam的博客 3386

QMI8658姿态传感器实战:从校准到自检的完整避坑指南

本文详细解析了QMI8658姿态传感器的校准与自检流程,提供了从硬件环境搭建到高级功能开发的完整避坑指南。通过真实案例揭示电源设计、接口优化、温度补偿等关键细节,帮助开发者提升传感器精度和可靠性,适用于工业级应用场景。

weixin_29184075的博客 455

递归的概述及应用

递归 aa bbb

WARCRAFT3X的博客 441

《派出你的AI同事:WorkBuddy案例实战》062:投研资讯摘要与预警

投研资讯摘要与预警:新闻、公告、行情交给 AI 同事提炼与预警,投研从“刷资讯”变成“读摘要”。

LuckyHanMo的博客 182

组建高效AI开发团队:角色、技能与协作

在当今科技飞速发展的时代,人工智能(AI)已经成为各个领域的核心驱动力。组建高效的AI开发团队对于企业和科研机构来说至关重要,它能够推动创新、提高竞争力、实现业务目标。本文的目的在于为那些希望组建或优化AI开发团队的管理者、技术负责人以及相关从业者提供全面的指导。范围涵盖了团队角色的定义、所需技能的分析、团队协作的策略,以及实际项目中的应用和相关资源的推荐。本文将首先介绍AI开发团队的核心概念与联系,包括团队角色、技能和协作之间的关系。接着阐述核心算法原理和具体操作步骤,结合数学模型和公式进行详细讲解。

2502_91592937的博客 995

一文带你彻底搞懂递归

一文带你彻底搞懂递归 前言:鄙人知道的并不多,但致力于把所知道的讲清楚。在学习的道路上最怕遇到忽悠文,还有一本正经扯着专业术语的深奥文,所以鄙人的愿景来了:希望你看完这篇文章后,不会觉得这是两类中的其一,并且会由衷的感慨这样的述说风格真是一种难能可贵的优秀品质! “滴,前方 递归 收费站高速入口,请系好安全带 ” 目录: 1、递归基本概念 2、爬楼梯例题 3、全排列例题 4、N皇后例题 5、反转链表例题 一、递归基本概念 递归在我们生活中一直都有使用

qq_43437431的博客 842

innovus:sroute 双层follow pin的做法

根据std cellpower pin的层次可以分成两种情况。

m0_61544122的博客 2731

递归详解——让你真正明白递归的含义

让天下没有难学的程序(只有秃头的程序员 2333),学会程序和算法,走遍天下都不怕! 今天呢我们来讲一下非常有用也非常令人费解的算法——递归! Oh my god 可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,..

青春无问西东 岁月自成芳华 12万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Ackerman的递归与非递归算法

已知Ackerman函数的定义如下: akm(m,n)=⎧⎩⎨n+1,akm(m−1,1),akm(m−1,akm(m,n−1)),m = 0m≠0,n=0m≠0,n≠0akm(m,n)= \begin{cases} n+1, & \text{m = 0} \\ akm(m-1,1),& m \neq 0, \, n = 0 \\ akm(m-1,akm(m,n-1)),& m \ne

sanqima的专栏 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

将递归函数转换为非递归形式

任何递归函数转换为非递归函数有一套固定的规则,使用该规则可以将任何递归函数转换为非递归函数。

sunny_ss12的专栏 1万+

【算法】递归:递归优化之尾递归

文章首先会先通过斐波那契数列来复习在以往介绍的解决递归的方法,然后在通过这个例子去分析递归法的不足之处,最后将会介绍一下关于递归的优化策略,并举例实现。

qq_66725576的博客 4967

递归算法与非递归算法比较

转载自:https://blog.csdn.net/mhsszm/article/details/78445591 非递归效率高;递归代码写出来思路清晰,可读性强。 生成可执行文件大小应该和编译器有关吧。。。。 递归的话函数调用是有开销的,而且递归的次数受堆栈大小的限制。 以二叉树搜索为例: bool search(btree* p, int v) { if (null ...

u013073067的博客 1万+

递归与间接递归

1. 介绍 递归技术允许我们将原问题分解为一个或多个形式上相似的子问题   2. 例子:级数 级数(n!)的定义如下:    n! = 1 * 2 * 3 * .... * (n-2) * (n-1) * n 可以根据定义写出如下迭代形式的实现 int fact(int n) {    int i;    int result;       result = ...

java的天空 4494

递归?何为递归

递归算法是一种直接或间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解.   递归的分类:     递归分为两种,直接递归和间接递归。     直接递归称为方法自身调用自己。     间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。     for循环实现99乘法表 public class test99 { public static void main( String[] args ) { ...

u012343977的博客 1789

对递归的理解以及怎么写递归程序

1.一定要搞清楚当前你的递归程序的功能是什么,以及需不需要返回值,如果需要,则返回的值是什么,如果对当前递归程序要完成的功能模棱两可、一知半解,那么逻辑肯定混乱,也就不容易写出正确的递归程序。 2.找递归终止条件,根据函数的参数来看,看参数怎么样的时候是到了递归出口,注意:这种递归终止情况是由:1.这个递归程序解决的就是一个终止条件,比如斐波那契就是为了算n=1或者2。2这个终止情况是由上...

xiaohuihui1994的博客 6455

递归——线性递归与二分递归

递归线性递归例子1:数组求和int sum( int A[], int n) { //数组求和算法:线性递归版 if ( 1 &gt; n ) //平凡情况,递归基 return 0; //直接计算 else //一般情况 return sum(A, n-1) + A[n - 1]; //递归:前n-1项之和,再累计第n-1项 }每一递归实例对自身的调用至多一次。于是,每...

amoscykl的博客 5043

什么是递归?递归有哪些常见应用?

选择递归还是迭代应根据具体问题的需求和资源限制来决定。如果问题可以分解为多个相似子问题,且注重代码的简洁性和可读性,递归可能是更好的选择。然而,在追求高效运行和处理大量数据时,迭代通常更为适用。

破损的天堂鸟博客 1983

递归算法和尾递归

递归算法和尾递归

Charge8的博客 1709

递归 递归 递归 —深入浅出

递归是种思想,不是算法。一个算法,你用递归去实现,它就是递归算法;你用循环去实现,它就是非递归算法。递归与循环一一对应,大多数编程语言都支持循环,但不一定支持递归。一个大问题,分解成类似的小问题,递归只用一句话就能描述这些“重复工作”,代码那叫一个简单!想想这句话的威力都觉得很牛B!递归算法简单而又经典的例子有:n!、Fibonacci、Hanoi、回溯、树遍历、图搜索。敲代码的时候,

小北的家 6781

递归与非递归

一、什么是递归很多数据结构的定义都是根据递归性质来进行定义的,是因为这些结构固有的性质。递归是指某个函数直接或间接的调用自身。问题的求解过程就是划分成许多相同性质的子问题的求解,而小问题的求解过程可以很容易的求出,这些子问题的解就构成里原问题的解了。二、递归的几个特点1.递归式,就是如何将原问题划分成子问题。2.递归出口,递归终止的条件,即最小子问题的求解,可以允许多个出口。3.界函数,问

ldong2007的专栏 2270
上一篇: 在对象中使用定时器
下一篇: JavaScript 检测数组
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值