博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归函数
阅读量:6950 次
发布时间:2019-06-27

本文共 1214 字,大约阅读时间需要 4 分钟。

假如一个函数或子程序,是由自身所定义或调用的,就称为递归。递归至少要定义两种条件:一个是可以反复执行的递归过程,和一个跳出执行过程的出口。

 汉诺塔问题

  说是在古印度神庙,庙中有3根木桩,天神希望和尚们把某些数量大小不同的盘子,从第一个木桩全部移到第三个木桩。即假设有a,b、c三个木桩和n个大小不相同的盘子,从小到大编码为1、2、3...n,编号越大,直径越大,开始的时候,n个盘子都放在木桩a上,现在希望能找到将木桩a上的盘子借着木桩b当桥梁,全部移到木桩c上的最少次数的方法(直径小的盘子永远只能放在直径大的盘子的上面;盘子可以任意移动到其他木桩上;每次只能移动一个盘子)。分析汉诺塔问题可以发现,它满足了递归的两大特点:1,有反复执行的过程;2,有停止的出口。

  汉诺塔的算法就3个步骤:第一,把a上的n-1个盘通过c移动到b。第二,把a上的最下面的盘移到c。第三,因为n-1个盘全在b上了,所以把b当做a重复以上步骤就好了。用代码实现为

function hanoi(n,p1,p2,p3){    if(n==1){
//递归出口 console.log("盘子从"+p1+"移动到"+p3); }else{ hanoi(n-1,p1,p3,p2) console.log('~盘子从'+p1+'移动到'+p3) hanoi(n-1,p2,p1,p3) }}let hanoi = (n,p1,p2,p3) => {  if(n==1){    console.log("盘子从"+p1+"移动到"+p3);  }else{    hanoi(n-1,p1,p3,p2)    console.log('~盘子从'+p1+'移动到'+p3)    hanoi(n-1,p2,p1,p3)  }}

 

斐波拉契数列

斐波拉契数列的基本定义是,一个数列的第零项是0,第一项是1,这个数列其他后续的值是前面两项的数列之和。同样符合递归的两个特征。

function factorial(i){  if(i==0){
//跳出执行过程的出口    return 0;  }else if(i==1){    return 1;  }else{    return factorial(i-1)+factorial(i-2);  }}let factorial = (i) => {  if(i==0){
//跳出执行过程的出口    return 0;  }else if(i==1){    return 1;  }else{    return factorial(i-1)+factorial(i-2);  }}

 

转载于:https://www.cnblogs.com/web-fengmin/p/6664563.html

你可能感兴趣的文章
论坛PC端模板
查看>>
域名解析
查看>>
通过SNMP获取接口速率 32位与64位的区别
查看>>
Windows上用gcc编译SQLite3
查看>>
bash位置参数的简介
查看>>
VirtualBox导入其他虚拟机后网络问题
查看>>
js 正则通过class查找Tag内的内容。
查看>>
Let's Encrypt 使用教程,免费的SSL证书,让你的网站拥抱 HTTPS
查看>>
.net 面试题系列四(附答案)
查看>>
sql server的并发性
查看>>
windows php启动浏览器
查看>>
CPP_类模板与模板类
查看>>
用CocoaPods做iOS程序的依赖管理
查看>>
虚拟机的类加载机制
查看>>
登录判断跳转页面
查看>>
多线程IO操作(扫描文件夹并计算总大小)
查看>>
读UNIX编程艺术(一)
查看>>
oracle存储过程获取异常信息码和异常信息
查看>>
大系统小做培训总结
查看>>
Web Service 那点事儿(3)—— SOAP 及其安全控制
查看>>