题目一:
问答
请写出如下代码运行后产生的结果,并给出解释,说明结果是如何得出的。
setTimeout(() => console.log('a'));
Promise.resolve().then(() => console.log('b');).then(() => Promise.resolve('c').then((data) => {setTimeout(() => console.log('d'));console.log('f');return data;})).then(data => console.log(data));
答案:b,f,c,a,d
解析:
在同一个作用域内,同步的宏任务先执行(普通代码), 然后是微任务(promise.then或promise.catch等), 再接着是异步的宏任务(计时器等)。
事件栈:
同步宏任务,微任务(两者按顺序排在前面),异步宏任务(因为是异步,是排在后面的,即使延迟0秒也是)
题目二:
编程
形如1, 1, 2, 3, 5, 8, 13, 21, 34, 55的数列,后一位是前面两位相加(斐波那契数列),写出函数要求找到第 N 位是多少,如:fib(3) => 3 , fib(5) => 8, 要求时间复杂度为O(n)。
输入样例1:3
输出样例1:2
输入样例2:5
输出样例2:5
答案
#include<iostream>
#include<math.h>
using namespace std;
fib(int n){int a=1,b=1,c=0;for(int i=0;i<n-2;i++){c=a+b;a=b;b=c;}return c;}
int main(){int m;cin>>m;if(m==1||m==2)cout<<'1'<<endl;elsecout<<fib(m)<<endl;return 0;
}