登录
首页 >  Golang >  Go问答

能否在不使用for/while和if/else的情况下使用golang解决这个数组摘要面试题?

来源:stackoverflow

时间:2024-02-15 15:36:25 309浏览 收藏

有志者,事竟成!如果你在学习Golang,那么本文《能否在不使用for/while和if/else的情况下使用golang解决这个数组摘要面试题?》,就很适合你!文章讲解的知识点主要包括,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

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

(1) 输入一个整数,例如i

(2) 计算1+2+...+i的汇总,输出汇总

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

嗯,在 c++ 或 java 中这非常简单。我们可以使用静态变量来初始化对象数组,而对象的构造函数则计算此摘要。像这样:

#include 
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 中可以做同样的事情吗? (没有 for 循环,没有 if else)。谢谢。


正确答案


这是一个与语言无关的解决方案,不使用乘法,不使用 for 也不使用 if

这有点像递归解决方案,其中 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

以上就是《能否在不使用for/while和if/else的情况下使用golang解决这个数组摘要面试题?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>