golang能在没有for/while if/else的情况下实现这个获取数组摘要的面试问题吗



我正在研究一个有趣的面试问题,并尝试用go实现它。

(1(输入一个整数,比如i

(2(计算1+2+...+i的摘要,输出摘要

(3(要求:不使用乘法,不使用循环(for/while(,不使用if/else

好吧,在c++或java中,这很容易。我们可以使用静态变量初始化对象数组,而对象的构造函数则计算此摘要。像这样:

#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既没有构造函数,也不支持静态变量。而且它没有任何模板语法。此外,使用递归函数仍然需要代码中的if分支。

所以,在go中也可以做同样的事情吗?(循环为否,否则为否(。谢谢

这里有一个不使用乘法、不使用forif的语言中立解决方案。

这有点像递归解决方案,其中if被一个函数映射所取代,该函数映射具有truefalse分支的函数:

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,输出为(在Go Playground上试试(:

sum: 55

最新更新