导航:首页 > 创造发明 > 递归是谁发明的

递归是谁发明的

发布时间:2021-08-12 01:11:58

㈠ 递归是什么

递归是一种重要的编程技术。该方法用于让一个函数从其内部调用其自身。一个示例就是计算阶乘。0 的阶乘被特别地定义为 1。 更大数的阶乘是通过计算 1 * 2 * ...来求得的,每次增加 1,直至达到要计算其阶乘的那个数。

下面的段落是用文字定义的计算阶乘的一个函数。

“如果这个数小于零,则拒绝接收。如果不是一个整数,则将其向下舍入为相邻的整数。如果这个数为 0,则其阶乘为 1。如果这个数大于 0,则将其与相邻较小的数的阶乘相乘。”

要计算任何大于 0 的数的阶乘,至少需要计算一个其他数的阶乘。用来实现这个功能的函数就是已经位于其中的函数;该函数在执行当前的这个数之前,必须调用它本身来计算相邻的较小数的阶乘。这就是一个递归示例。

递归和迭代(循环)是密切相关的 — 能用递归处理的算法也都可以采用迭代,反之亦然。确定的算法通常可以用几种方法实现,您只需选择最自然贴切的方法,或者您觉得用起来最轻松的一种即可。

显然,这样有可能会出现问题。可以很容易地创建一个递归函数,但该函数不能得到一个确定的结果,并且不能达到一个终点。这样的递归将导致计算机执行一个“无限”循环。下面就是一个示例:在计算阶乘的文字描述中遗漏了第一条规则(对负数的处理) ,并试图计算任何负数的阶乘。这将导致失败,因为按顺序计算 -24 的阶乘时,首先不得不计算 -25 的阶乘;然而这样又不得不计算 -26 的阶乘;如此继续。很明显,这样永远也不会到达一个终止点。

因此在设计递归函数时应特别仔细。如果怀疑其中存在着无限递归的可能,则可以让该函数记录它调用自身的次数。如果该函数调用自身的次数太多,即使您已决定了它应调用多少次,就自动退出。

下面仍然是阶乘函数�獯问怯?JScript 代码编写的。

// 计算阶乘的函数。如果传递了
// 无效的数值(例如小于零),
// 将返回 -1,表明发生了错误。若数值有效,
// 把数值转换为最相近的整数,并
// 返回阶乘。
function factorial(aNumber) {
aNumber = Math.floor(aNumber); // 如果这个数不是一个整数,则向下舍入。
if (aNumber < 0) { // 如果这个数小于 0,拒绝接收。
return -1;
}
if (aNumber == 0) { // 如果为 0,则其阶乘为 1。
return 1;
}
else return (aNumber * factorial(aNumber - 1)); // 否则,递归直至完成。

㈡ 递归是什么

递归就是有递有归

简单来说就是程序或者函数自己调用自己,以此来将问题简化

㈢ java中的递归到底是什么来的啊 本人初学的 要多的简单的例子啊 没有不给分

递归就是直接或者间接对自身进行调用。。

1.先想参数
2.递归的条件
3.递归的边界

以后遇到递归题,就从这三个方面思考..容易些。
顺便 给你一道杨辉三角形的题。。
/***************************************************

* 利用递归输出杨辉三角

***************************************************/
public class YangHui
{
public static void main(String args[])
{
int hang=0;//行数
int dangQian = 0;//每行的当前数
for(;hang<=9;hang++)
{
for(dangQian=0;dangQian<=hang;dangQian++)
System.out.print(num(hang,dangQian)+"\t");
System.out.println();
}

}

/*
思想:
1.由观察可以得到两边的元素值为1,即(dangQian == n ||dangqian == 1)=1。
2.num(hang,dangQian)=num(hang-1,dangQian-1)+num(hang-1,dangQian)
*/
static long num(int _hang,int _dangQian)
{
if(_dangQian<=0||_dangQian>=_hang)
return 1;
return(num(_hang-1,_dangQian)+num(_hang-1,_dangQian-1));
}
}

㈣ 黄金分割点的发现者是谁

楼上不懂不要乱说

发现者是裴波那契,就是那个“递归序列”1、1、2、3、5、8、13、21………………,每个数与前面的数的比值越来越接近1.618……

黄金分割的表示方法是(1+√5)/2

不懂用HI找我

㈤ 关于递归

递归在内存中就是进栈出栈的问题。你找一下C语言的教材,一般都会提到递归具体过程。
另外栈的原理是先进后出,后进先出,根据这个原则,分析如下:
当主函数执行move(9)就调用move这个函数,由于move(9)一下子得不到确切的值,就只能进栈,然后计算move(8),又进栈,如此重复下去一直到move(1),此时得到1;于是move(1)开始出栈,输出1,然后move(2)出栈,又输出2,如此重复到move(9),输出9。
进栈:move(9)->move(8)->...move(1)
出栈:move(1)->move(2)->...move(9)
所以最后就是输出1 2 3 4 5 6 7 8 9

㈥ 递归的原理解释

递归的底层实现其实是一个栈.栈的特点是后进先出,也就是最后进入栈的事件是最先被处理的.
递归就是这样运作.比如计算阶乘函数F(n)=n!=n*F(n-1)=....
写成递归,我用java
public static long F(long num){
if(num<=1)
return 1;
return F(num-1)*num;
}
static public void main(String argv[]){
System.out.println(F(5));
}:
第一次计算的时候是F(num),进入之后会直接return F(num-1)*num.也就是把这一项入栈.
然后这一项到底是多少还不知道需要继续计算.
第二次递归就是 F(num-1-1)*(num-1).入栈.
直到满足num<=1.计算出最后入栈的F(1)=1;return这句就限定了最终栈的大小.
然后开始出栈.第一个出栈的是F(1);已经计算得出是1;
第二个出栈是F(2).由F(1)可以得知F(2).
这样直到栈空,阶乘也就计算出来了.

递归的内部是栈实现的.理解了这个,你也可以自己写非递归的递归,也就是用栈实现的递归.

㈦ 递归论的历史

递归论这门学科最早可以追溯到原始递归式的使用。古代人以及现代的儿童对加法及乘法的理解,实质上就是使用原始递归式。但直到17世纪,法国学者B.巴斯加尔才正式使用与递归式密切相关的数学归纳法。19世纪德国数学家R.戴德金德和意大利的G.皮亚诺正式使用原始递归式,以定义加法与乘法,从而发展了整个自然数论。1923年,T.司寇伦提出并初步证明一切初等数论中的函数都可以由原始递归式作出,即都是原始递归函数。1931年,K.哥德尔在证明其著名的不完全性定理时,以原始递归式为主要工具把所有元数学的概念都算术化了。原始递归函数的重要性遂受到人们的重视,人们开始猜测,原始递归函数可能穷尽一切可计算的函数。但是,德国数学家W.阿克曼的非原始递归的可计算函数的出现,否定了这个猜测,同时也要求人们探讨原始递归函数以外的可计算函数。1934年,哥德尔在J.赫尔布兰德的启示之下,提出了一般递归函数的定义;美国的S.C.克利尼则于1936年证明了这样定义的一般递归函数和A.丘奇所定义的λ可定义函数是相同的,并给出了几种相等价的定义。这样的一般递归函数后来被称为赫尔布兰德-哥德尔-克利尼定义。1936年,丘奇、A.M.图林各自独立地提出一个论点,即凡可计算的函数都是一般递归函数,这就把递归函数论与能行性论紧紧地结合起来,从而使递归函数的应用范围大大地扩展了(见能行性与一般递归)。关于递归函数本身的进展主要在于定义域的推广,从而得到递归字函数、a递归函数和递归泛涵等等。

㈧ 什么是递归

程序调用自身就叫做递归。
递归一般用来算一些比较麻烦的算法问题。
递归跟循环的区别,循环注重过程,而递归值注重结果。
简单的来说就是:用循环能实现的,递归一般可以实现,但是能用递归实现的,循环不一定能。因为有些题目①只注重循环的结束条件和循环过程,而往往这个结束条件不易表达(也就是说用循环并不好写);②只注重循环的次数而不注重循环的开始条件和结束条件(这个循环更加无从下手了)。
要想理解递归一时半会也弄不明白。但是写递归需要记住三个步骤。
1.首先去找临界值,即无需计算,获得的值。
2. 找这一次和上一次的关系
3. 假设当前函数已经可以使用,调用自身计算上一次和这一次的关系。

㈨ 什么是递归

递归,就是在运行的过程中调用自己。构成递归需具备的条件:1. 子问题须与原始问题为同样的事,且更为简单;2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。例如,下列为某人祖先的递归定义:某人的双亲是他的祖先(基本情况)。某人祖先的双亲同样是某人的祖先(递归步骤)。斐波纳契数列(Fibonacci Sequence),又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21..... I[1] 斐波纳契数列是典型的递归案例:递归关系就是实体自己和自己建立关系。Fib(0) = 1 [基本情况] Fib(1) = 1 [基本情况] 对所有n > 1的整数:Fib(n) = (Fib(n-1) + Fib(n-2)) [递归定义] 尽管有许多数学函数均可以递归表示,但在实际应用中,递归定义的高开销往往会让人望而却步。例如:阶乘(1) = 1 [基本情况] 对所有n > 1的整数:阶乘(n) = (n * 阶乘(n-1)) [递归定义] 一种便于理解的心理模型,是认为递归定义对对象的定义是按照“先前定义的”同类对象来定义的。例如:你怎样才能移动100个箱子?答案:你首先移动一个箱子,并记下它移动到的位置,然后再去解决较小的问题:你怎样才能移动99个箱子?最终,你的问题将变为怎样移动一个箱子,而这时你已经知道该怎么做的。如此的定义在数学中十分常见。例如,集合论对自然数的正式定义是:1是一个自然数,每个自然数都有一个后继,这一个后继也是自然数。

㈩ 递归是怎么一回事哪位老师能否通俗易懂的讲讲原理

递归通俗的讲就是一个函数在其代码中反复调用自身。你应该知道菲波纳契数列,这个数列的定义是

f(x)=1 (x=1)
f(x)=2 (x=2)
f(x)=f(x-1)+f(x-2) (x>2)
也就是说从第三项开始的每一项的值都等于是前两项之和。这在数学中叫递推数列--高中数学内容。
如果把它变为一个要求第n个菲波纳契数的代码的话,应该如下所示(为了避免语言不通:)我使用伪代码):

int f(int step)
在这里x为上面所说的x变量,也就是要求的是第x项的值
{
if step=1
{
return 1
}
else if step=2
{
return 2
}
如果求得是第一项和第二项的话,就分别返回1和2,并退出函数

return f(x-1)+f(x-2)
否则的话就返回前面两项的和
}

这里的关键是最后一句。这里函数的返回直又要反过去调用它自身计算前面两项的值,这样就会反复调用,直到x变量在某次调用中变为1和2,返回已知的第一项和第二项的值,在层层返回,最后得出要求的第x项的值

说到本质的话,递归是一段程序的代码反复效用,把程序的参数等变量保存在一个堆栈里,直到到了边界条件以后再层层返回,将堆栈中的数据弹出计算,最后得到结果

阅读全文

与递归是谁发明的相关的资料

热点内容
西安私人二手挖机转让 浏览:698
债务股权转让 浏览:441
食堂转让合同范本 浏览:335
广西华航投资纠纷 浏览:902
萌分期投诉 浏览:832
金软pdf期限破解 浏览:730
马鞍山学化妆 浏览:41
胶州工商局姜志刚 浏览:786
了解到的发明创造的事例 浏览:391
2012年中国知识产权发展状况 浏览:773
合肥徽之皇知识产权代理有限公司 浏览:636
天津企兴知识产权待遇 浏览:31
二项基本公共卫生服务项目试题 浏览:305
基本公共卫生服务考核标准 浏览:543
公共卫生服务考核评估办法 浏览:677
上海工商局咨询热线 浏览:177
马鞍山二中叶张平 浏览:214
机动车交通事故责任纠纷被告代理词 浏览:603
医院固定资产折旧年限 浏览:702
商标注册网先咨政岳知识产权放心 浏览:658