难以理解函数内的调用堆栈
trouble understanding call-stack within a function
我目前正在学习 Javascript 和 C.S 基础知识,我正在完成一项任务,该任务是创建一个函数,该函数采用值 (num) 并输出斐波那契数内的索引值。
示例:函数 (6) 输出 8;因为 8 是斐波那契数列中的第 6 个数字。
斐波那契数列:1,1,2,3,5,8
索引位置:1,2,3,4,5,6
下面是问题的解决方法。
const fibonacci = function(count) {
let a = 0;
let b = 1;
for (let i = 1; i < count; i++) {
const temp = b;
b = a + b;
a = temp;
}
return b;
};
我难以理解的部分在于 for 循环,从我收集到的信息来看,这似乎是它在调用堆栈中的执行方式:
- 执行 b + a
- 将 b 的前一个值存储在 temp
- a 现在等于 temp/previousValue
- 执行 b + a
- 更新 a 的值...
但我很难理解的是为什么 a 存储 B 的前一个值而不是当前值。
当我设想调用堆栈时 运行 我希望输出看起来像这样;
0,1
1,1
2,2
而不是..
0,1
1,1
1,2
在
之后,即使 b 现在等于 2,a 的值仍保持为 1
temp = b;
b = 1;
a = 1;
b = a + b // 2;
a = temp;
a 现在应该等于 2,但它仍然是 1;为什么?
如果我没理解错的话,你的误会是:
a is now equal to temp/previousValue
存储在a
中的值直到循环体中的最后一个操作才会改变。初始值为a=0; b=1;
,当循环体运行时,
temp
设置为b
的值,所以temp=1;
b
设置为 a+b
,所以 b=1
a
更新为 temp
中的值,因此 a=1
在每个循环结束时,b
保存下一个斐波那契值。 a
中的值仅更新为先前的值,以便可以在循环的下一次迭代中使用它来计算 b
.
的新值
我目前正在学习 Javascript 和 C.S 基础知识,我正在完成一项任务,该任务是创建一个函数,该函数采用值 (num) 并输出斐波那契数内的索引值。
示例:函数 (6) 输出 8;因为 8 是斐波那契数列中的第 6 个数字。
斐波那契数列:1,1,2,3,5,8
索引位置:1,2,3,4,5,6
下面是问题的解决方法。
const fibonacci = function(count) {
let a = 0;
let b = 1;
for (let i = 1; i < count; i++) {
const temp = b;
b = a + b;
a = temp;
}
return b;
};
我难以理解的部分在于 for 循环,从我收集到的信息来看,这似乎是它在调用堆栈中的执行方式:
- 执行 b + a
- 将 b 的前一个值存储在 temp
- a 现在等于 temp/previousValue
- 执行 b + a
- 更新 a 的值...
但我很难理解的是为什么 a 存储 B 的前一个值而不是当前值。
当我设想调用堆栈时 运行 我希望输出看起来像这样;
0,1
1,1
2,2
而不是..
0,1
1,1
1,2
在
之后,即使 b 现在等于 2,a 的值仍保持为 1temp = b;
b = 1;
a = 1;
b = a + b // 2;
a = temp;
a 现在应该等于 2,但它仍然是 1;为什么?
如果我没理解错的话,你的误会是:
a is now equal to temp/previousValue
存储在a
中的值直到循环体中的最后一个操作才会改变。初始值为a=0; b=1;
,当循环体运行时,
temp
设置为b
的值,所以temp=1;
b
设置为a+b
,所以b=1
a
更新为temp
中的值,因此a=1
在每个循环结束时,b
保存下一个斐波那契值。 a
中的值仅更新为先前的值,以便可以在循环的下一次迭代中使用它来计算 b
.