gpt4 book ai didi

go - 在 Go 中用递归练习 "Naked Returns"。我的ELSE语句中的return语句不正确吗?

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:20 25 4
gpt4 key购买 nike

尝试一个简单的递归函数,它接受一个数字,以某种方式拆分它,并且只有在拆分后的数字彼此相等时才应该返回它。

package main

import "fmt"

func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x

if y == x || sum > 200 {
return
} else {
split(sum+1)
return
}
}

func main() {
fmt.Println(split(10))
}

fmt.Println(split(10)) 的输出是 4 和 6,这是不正确的,因为它们彼此不相等。这是由于我的 ELSE 语句末尾的 return 语句吗?我有 JAVA 背景,所以我认为那条线永远不会被击中。

最佳答案

当您使用 (x, y int) 在函数定义中声明变量时执行返回将返回 x 的值和 y在那时候。当您递归调用 split 函数时,它将分配一个新的 x。和 y对于该函数调用,因此更改那里的值不会影响外部范围。

您可以通过返回递归 split 的返回值来解决这个问题调用,因为当前您通过在返回之前的行上调用它来忽略结果。

但是我会注意到,在此实现中,任何大于 0 的输入值都不会相等,并且对于任何输入都将返回与 sum > 200 相同的值子句触发器。

https://play.golang.org/p/fzuPtqPCxpE

package main

import "fmt"

func split(sum int) (int, int) {
x := sum * 4 / 9
y := sum - x

if y == x || sum > 200 {
return
} else {
return split(sum + 1)
}
}

func main() {
fmt.Println(split(10))
}

关于go - 在 Go 中用递归练习 "Naked Returns"。我的ELSE语句中的return语句不正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51656606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com