问一个递归执行顺序的问题

2017-10-18 09:12:15 +08:00
 waiaan
function fn1(){
fn1(); //(1)
fn2(); //(2)
}
大致这么一个顺序,请问是必须等(1)的递归执行完之后才会执行(2)吗?
谢谢。
3615 次点击
所在节点    JavaScript
28 条回复
123s
2017-10-18 09:15:10 +08:00
fn2 不会执行吧
brickyang
2017-10-18 09:18:14 +08:00
你这个递归没有退出条件,会无限死循环
waiaan
2017-10-18 09:18:39 +08:00
@brickyang
@123s
只是举个例子
BBCCBB
2017-10-18 09:18:56 +08:00
是的,
但是你这个代码写的有问题, 没有出口, 导致了死循环.
yulitian888
2017-10-18 09:20:30 +08:00
@123s 只要不是死循环,fn2 应该被执行。
但是楼主问的“执行完之后”的“后”怎么算呢,每一个循环体里都要被执行一次 fn2,对外层的 fn1 调用可以算“后”,但是同级来开,fn2 就是 fn1 的一部分
waiaan
2017-10-18 09:20:30 +08:00
@BBCCBB
我知道,只是举个例子说明一下我的问题。
关注点在执行顺序上。
Damon4V
2017-10-18 09:25:56 +08:00
顺序 fn1.....fn1 -> fn2....fn2
polun
2017-10-18 09:28:08 +08:00
不知道楼主是不是这个意思:

var times = 1;

function fun1() {
console.log(times + ' fun1...');
if (times++ < 9) {
fun1();
}

fun2();
console.log('--- 我是分割线 ---');
}

function fun2() {
console.log(times + ' fun2...');
}

fun1();

自己可以试试
secondwtq
2017-10-18 09:29:52 +08:00
可以去看看二叉树的遍历
zheng5200
2017-10-18 09:31:48 +08:00
是的,前一个执行完了,才会执行下一个
waiaan
2017-10-18 09:41:49 +08:00
@secondwtq
就是从这来的,这一段没看懂。
waiaan
2017-10-18 09:47:03 +08:00
@polun 多谢。
zhaoweichen
2017-10-18 09:48:28 +08:00
假设 fn1 有正常的判断条件
fn1_level0 => fn1_level1 => ... => fn1_leveln => fn2_leveln => fn2_leveln-1 => ... fn2_level0

lz 需要补一补函数调用和 stack 的维护
waiaan
2017-10-18 11:47:04 +08:00
@zhaoweichen 谢谢
JKeita
2017-10-18 15:10:54 +08:00
每个递归层次,fn2 都会在 fn1 执行完后执行
waiaan
2017-10-18 17:42:37 +08:00
@JKeita 然而并不是
JKeita
2017-10-19 09:03:59 +08:00
你自己写个函数试下就清楚了,同级下 fn2 绝对是在 fn1 执行完后执行。
JKeita
2017-10-19 09:12:24 +08:00
@waiaan
function fn1($i)
{
if($i == 0){
return;
}
fn1(--$i);
echo "fn1:$i done. \n";
fn2();
}

function fn2()
{
echo "exec fn2 \n";
}

fn1(3);

输出结果:
fn1:0 done.
exec fn2
fn1:1 done.
exec fn2
fn1:2 done.
exec fn2
waiaan
2017-10-19 09:47:18 +08:00
@JKeita 谢谢,请教一下为什么和 8 楼的执行顺序不一样?
JKeita
2017-10-19 09:48:38 +08:00
@waiaan 8 楼那个写的就是错的,他用循环调用 fn1,而且输出也是在递归之前就执行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/398519

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX