簡體   English   中英

golang 可以在沒有 for/while if/else 的情況下實現這個獲取數組摘要的面試問題嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM