int mystery(int n) {
int s = 0;
int tmp = n+1;
for (int i; i<=n; i++) {
s = tmp + i;
tmp = s;
}
return s;
}
如何確定該函數以及函數的作用?此外,該功能是否可以在運行時間方面得到改進?找到一個確切的函數,指出該算法所採用的步數
int mystery(int n) {
int s = 0;
int tmp = n+1;
for (int i; i<=n; i++) {
s = tmp + i;
tmp = s;
}
return s;
}
如何確定該函數以及函數的作用?此外,該功能是否可以在運行時間方面得到改進?找到一個確切的函數,指出該算法所採用的步數
上面有一些多餘的代碼; s
是完全不必要的。重寫它沒有它使得它更清晰。
int mystery(int n) {
int tmp = n + 1;
for (int i = 1; i<=n; i++) {
tmp += i;
}
return tmp;
}
它所做的是
tmp
爲N + 1這個目前擁有的運行時間O(n)
。然而,事實證明1 + 2 + 3 + ... + N
有一個constant time formula。我們可以使用它來創建以下,這是不變的時間。
int mystery(int n) {
int triangleNumber = (n * (n + 1))/2;
return triangleNumber + n + 1;
}
「我」初始化在哪裏?它是不確定的;只有'未定義的行爲'。 –
糟糕。沒有發現這一點。引用權利 –
'i'沒有被初始化,所以這個函數表現出未定義的行爲。 – dbush