博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js递归原理之return
阅读量:6091 次
发布时间:2019-06-20

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

js递归原理之return

先看以下代码:

var a = 1;function multiply(n) {    if (n <= 1) {        return 1;    }    a = n * multiply(n - 1);    console.log('n:' + n);    console.log('a:' + a);}console.log(multiply(5))

打开chrome浏览器断点调试,观看js执行过程

图片描述

//代码执行过程a=n*multiply(n-1)//n=5 a=1a=n*multiply(n-1)//n=4 a=1a=n*multiply(n-1)//n=3 a=1a=n*multiply(n-1)//n=2 a=1a=n*multiply(n-1)//n=1 a=1 return 1//此时函数开始向上回溯a=n*multiply(n-1)//n=2 a=2*1=2console.log('n:'+n)//n:2console.log('a:'+a)//a:2 return undefineda=n*multiply(n-1)//n=3 a=3*undefined=NaNconsole.log('n:'+n)//n:3console.log('a:'+a)//a:NaN return undefineda=n*multiply(n-1)//n=4 a=4*undefined=NaNconsole.log('n:'+n)//n:4console.log('a:'+a)//a:NaN return undefineda=n*multiply(n-1)//n=5 a=5*undefined=NaNconsole.log('n:'+n)//n:5console.log('a:'+a)//a:NaN return undefined

将代码修改一下:

var a = 1;function multiply(n) {    if (n <= 1) {        return 1;    }    a = n * multiply(n - 1);    console.log('n:' + n);    console.log('a:' + a);    return a;//每次将a返回}console.log(multiply(5))
//代码执行过程a=n*multiply(n-1)//n=5 a=1a=n*multiply(n-1)//n=4 a=1a=n*multiply(n-1)//n=3 a=1a=n*multiply(n-1)//n=2 a=1a=n*multiply(n-1)//n=1 a=1 return 1//此时函数开始向上回溯a=n*multiply(n-1)//n=2 a=2*1=2console.log('n:'+n)//n:2console.log('a:'+a)//a:2 return 2a=n*multiply(n-1)//n=3 a=3*2=6console.log('n:'+n)//n:3console.log('a:'+a)//a:6 return 6a=n*multiply(n-1)//n=4 a=4*6=24console.log('n:'+n)//n:4console.log('a:'+a)//a:24 return 24a=n*multiply(n-1)//n=5 a=5*24=120console.log('n:'+n)//n:5console.log('a:'+a)//a:120 return 120

总结:

所以在递归过程中,如果递归依赖上一次递归的结果,需要将结果return。

如果不需要上一次的结果,就不需要return。

所以示例代码的正确写法是:

function multiply(n) {    if (n <= 1) {        return 1;    }    return n * multiply(n - 1);}

转载地址:http://mpmwa.baihongyu.com/

你可能感兴趣的文章
Hive Export和Import介绍及操作示例
查看>>
http://mongoexplorer.com/ 一个不错的 mongodb 客户端工具。。。
查看>>
上传jar包到nexus私服
查看>>
Why Namespace? - 每天5分钟玩转 OpenStack(102)
查看>>
Project:如何分析项目中的资源分配情况
查看>>
HDU 4803 Poor Warehouse Keeper (贪心+避开精度)
查看>>
小错误汇总
查看>>
Spring源码系列 — Envoriment组件
查看>>
java正则表达式去除html标签,Java中正则表达式去除html标签
查看>>
使用Cobbler批量部署Linux操作系统
查看>>
zabbix企业应用之服务端与客户端的安装
查看>>
实例讲解遗传算法——基于遗传算法的自动组卷系统【理论篇】
查看>>
无法在web服务器上启动调试。调试失败,因为没有启用集成windows身份验证
查看>>
Bat相关的项目应用
查看>>
Django为数据库的ORM写测试例(TestCase)
查看>>
NYOJ-107 A Famous ICPC Team
查看>>
与众不同 windows phone (44) - 8.0 位置和地图
查看>>
Visual Studio Code 使用 ESLint 增强代码风格检查
查看>>
iOS设备中的推送(二):证书
查看>>
敏捷 - #3 原则:经常提供工作软件 ( #3 Agile - Principle)
查看>>