javascript - 求教递归问题?
巴扎黑
巴扎黑 2017-04-11 13:24:23
[JavaScript讨论组]

有个逻辑题,给出总数楼梯,每次最多可走3步楼梯
如: 总数楼梯3步
有如下:

1 1 1
1 2 
2 1
3

请问用js如何实现这样的递归?

-----补充---

这个数组有点看不懂,第一个显示3,但length有7,这是为什么呢?希望解答下,还有其余三个。

巴扎黑
巴扎黑

全部回复(1)
巴扎黑
0 function dfs(n, arr) {
1   for (var i = Math.min(n, 3); i > 0; i--) {
2     arr.push(i);
3     if (n - i > 0) dfs(n - i, arr);
4     else document.write(arr + '<br/>');
5     arr.pop();
6   }
7 }
8 dfs(4, []);

arr 是个临时列表 保存一种组合情况用的 必须在函数调用的外面创建 不能在递归函数里创建

就拿我最下面那个4的例子把程序跑一遍

  1. 第8行 开始调用dfs(4, [])

  2. 第1行 n=4 i=3 arr=[]

  3. 第2行 n=4 i=3 arr=[3]

  4. 第3行 递归调用dfs(4-3, [3])

  5. 第1行 n=1 i=1 arr=[3]

  6. 第2行 n=1 i=1 arr=[3,1]

  7. 第3行 n-i>0不成立 不再递归

  8. 第4行 打印arr([3,1])

  9. 第5行 把arr最后一个元素删掉 arr=[3]

  10. 第1行 n=1 i=0 arr=[3] 退出循环 递归终止

  11. 第5行 把arr最后一个元素删掉 arr=[]

  12. 第1行 n=4 i=2 arr=[]

  13. 第2行 n=4 i=2 arr=[2]

  14. 第3行 递归调用dfs(4-2, [2])

  15. 第1行 n=2 i=2 arr=[2]

  16. 第2行 n=2 i=2 arr=[2,2]

  17. 第3行 n-i>0不成立 不再递归

  18. 第4行 打印arr([2,2])

  19. 第5行 把arr最后一个元素删掉 arr=[2]

  20. 第1行 n=2 i=1 arr=[2]

  21. 第2行 n=2 i=1 arr=[2,1]

  22. 第3行 递归调用dfs(2-1, [2,1])

  23. 第1行 n=1 i=1 arr=[2,1]

  24. 第2行 n=1 i=1 arr=[2,1,1]

  25. 第3行 n-i>0不成立 不再递归

  26. 第4行 打印arr([2,1,1])

  27. 第5行 把arr最后一个元素删掉 arr=[2,1]

  28. 第1行 n=1 i=0 arr=[2,1] 退出循环 递归终止

...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号