Go 如何使斐波那契序列生成器更优雅? 主程序包 输入“fmt” func fib_seq()func()int{ n0,n1:=0,1 返回func()int{ 结果:=n0 n0,n1=n1,n0+n1 返回结果 } } func main(){ f:=fib_seq() 对于i:=0;i
这是我的斐波那契序列发生器。Go 如何使斐波那契序列生成器更优雅? 主程序包 输入“fmt” func fib_seq()func()int{ n0,n1:=0,1 返回func()int{ 结果:=n0 n0,n1=n1,n0+n1 返回结果 } } func main(){ f:=fib_seq() 对于i:=0;i,go,Go,这是我的斐波那契序列发生器。result的定义是不需要的(但是必需的) 我想知道有没有办法在返回后执行x,y=y,x+y package main import "fmt" func fib_seq() func() int { n0, n1 := 0, 1 return func() int { result := n0 n0, n1 = n1, n0 + n1 return result } } func mai
result
的定义是不需要的(但是必需的)
我想知道有没有办法在
返回后执行x,y=y,x+y
package main
import "fmt"
func fib_seq() func() int {
n0, n1 := 0, 1
return func() int {
result := n0
n0, n1 = n1, n0 + n1
return result
}
}
func main() {
f := fib_seq()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
名为return。但你所拥有的已经足够可读了
func fib_seq() func() int {
n0, n1 := 0, 1
return func() int {
defer func() {
n0, n1 = n1, n0 + n1
}()
return n0
}
}
就个人而言,我更喜欢以下内容(为了可读性):
类型fib结构{n0,n1 int}
func(f*fib)next()int{
延迟函数(){
f、 n0,f.n1=f.n1,f.n0+f.n1
}()
返回f.n0
}
func main(){
fib:=&fib{0,1}
对于i:=0;i<10;i++{
fmt.Println(fib.next())
}
}
“优雅”对不同的人意味着不同的东西。对一些人来说,它可能意味着“简洁”,而对另一些人来说,它可能意味着“简单”或“可读性”
以下是我对它的看法:
type fib struct{ n0, n1 int }
func (f *fib) next() int {
defer func() {
f.n0, f.n1 = f.n1, f.n0+f.n1
}()
return f.n0
}
func main() {
fib := &fib{0, 1}
for i := 0; i < 10; i++ {
fmt.Println(fib.next())
}
}
公共类Fibonacci{
私有静态int x;
私人静态智力;
私有静态intz;
公共静态void main(字符串[]args){
x=0;
y=1;
z=0;
系统输出println(x);
系统输出打印项次(y);
而(z<100){
z=x+y;
系统输出打印ln(z);
x=y;
y=z;
}
}
}
正如你所看到的,我喜欢可读性而不是复杂度:)你可以做延迟
,但那会很难看。看看golang.org的文章,你做的很好。还有另一种斐波那契计算方法。你可以使用矩阵。从编程的角度来看,它不那么优雅,但从数学的角度来看,它要优雅得多。我有一个Python实现的例子。如果你觉得有趣,我可以把它翻译成中文。这能回答你的问题吗。我同意你。。。您只是没有在Go
:)中执行此操作
type fib struct{ n0, n1 int }
func (f *fib) next() int {
defer func() {
f.n0, f.n1 = f.n1, f.n0+f.n1
}()
return f.n0
}
func main() {
fib := &fib{0, 1}
for i := 0; i < 10; i++ {
fmt.Println(fib.next())
}
}
public class Fibonacci {
private static int x;
private static int y;
private static int z;
public static void main(String[] args) {
x = 0;
y = 1;
z = 0;
System.out.println(x);
System.out.println(y);
while (z < 100) {
z = x + y;
System.out.println(z);
x = y;
y = z;
}
}
}