作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我对斐波那契算法的第一个实现是:
function fibo(max, old = 0, curr = 1) {
if( old === 0 && curr === 1 ) { console.log(curr) }
if(curr + old < max) {
console.log( curr + old);
fibo(max, curr, old + curr);
}
}
fibo(50);
我在 javascript 中玩斐波那契算法,我偶然发现了一个我无法解释的奇怪但更简洁的解决方案:
function fibo(max, old = 0, curr = old++) {
if(curr + old < max) {
console.log( curr + old);
fibo(max, curr, old + curr);
}
}
fibo(50);
为什么这个函数显示 1 1 2 .. 而不是 1 2 3 ... ?
最佳答案
why does this function display 1 1 2 .. and not 1 2 3 ... ?
old
是 0
直到它到达默认参数的初始化(在第一次调用时),它递增到 1
并且将 old
的原始值设置为 curr
。
所以 old
在第一次调用时是 1
并且 curr
是 0
,并且 1+ 0
第一次调用时为1
,下次调用时为1+0
。
这有点令人困惑,因为在第一次调用时,old
最终落后于 curr
,但总和当然是相同的。
关于javascript - 斐波那契的奇怪解决方案,需要解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48489185/
我是一名优秀的程序员,十分优秀!