題目一:
問答
請寫出如下代碼運行后產生的結果,并給出解釋,說明結果是如何得出的。
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;
}