Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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;
        }

    }
}