[英]Could golang implement this interview question of getting array summary without for/while if/else?
我正在研究一個有趣的面試問題,並嘗試使用 go 來實現它。
(1) 輸入一個 integer 編號,比如說
i
(2)計算
1+2+...+i
的匯總,output匯總
(3) 要求:不要使用乘法,不要使用循環(
for/while
),不要使用if/else
好吧,在 c++ 或 java 中,這很容易。 我們可以使用 static 變量來初始化一個 object 數組,而對象的構造函數 function 計算這個匯總。 像這樣:
#include <iostream>
struct s {
static int count;
static int sum;
s() {++count; sum += count;}
};
int s::count = 0;
int s::sum = 0;
int main(int argc, char *argv[]) {
s obj[10];
std::cout << s::sum << std::endl; // 55, ok
return 0;
}
(2) 在c++中我們也可以使用模板類型推導來做到這一點。 網上有很多樣片。
但是,我們可以用 go 語言來實現嗎?
我知道golang既沒有構造函數function,也不支持static變量。 而且它沒有任何模板語法。 另外,使用遞歸 function 仍然需要代碼中的if
分支。
那么這有可能在 go 中做同樣的事情嗎? (沒有 for 循環,沒有 if else)。 謝謝。
這是一個不使用乘法、不使用for
和不if
的語言中立解決方案。
這有點像遞歸解決方案,其中if
被替換為 function false
true
的功能:
fs := map[bool]func(int) int{}
fs[false] = func(int) int { return 0 }
fs[true] = func(i int) int { return i + fs[i > 1](i-1) }
var i int
fmt.Scanln(&i)
fmt.Println("sum:", fs[i > 0](i))
輸入10
, output 是(在Go Playground上試試):
sum: 55
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.