Algorithm 为什么我的GoLang算法是无限循环的?
我一直在尝试以多种方式解决下面的问题(递归地,使用Go版本的do-while循环和for循环)。但它们中的每一个都会进入一个无限循环。我尝试在JavaScript中使用相同的解决方案,效果非常好。有人能帮我理解为什么下面的解决方案不能工作/进行无限循环吗Algorithm 为什么我的GoLang算法是无限循环的?,algorithm,go,Algorithm,Go,我一直在尝试以多种方式解决下面的问题(递归地,使用Go版本的do-while循环和for循环)。但它们中的每一个都会进入一个无限循环。我尝试在JavaScript中使用相同的解决方案,效果非常好。有人能帮我理解为什么下面的解决方案不能工作/进行无限循环吗 // Write a function that takes in a number and returns the next number that is divisible by 7 package main
// Write a function that takes in a number and returns the next number that is divisible by 7
package main
func solution9(num int) int {
var done bool = false
var result int = 0
for i := 1; done != true; i++ {
if (num + i % 7 == 0) {
result = num + i
done = true
}
}
return result
}
您的问题是运算符优先级。%运算符的优先级高于+运算符,因此,如果
num
为10,则测试在功能上为:
10 + (0 % 7) == 0 => false (10)
10 + (1 % 7) == 0 => false (11)
10 + (2 % 7) == 0 => false (12)
等等
显然,对于任何
num
>0,您永远不会满足该条件。将测试更改为(num+i)%7==0
,您会发现它按预期工作。您的问题是操作员优先级。%运算符的优先级高于+运算符,因此,如果num
为10,则测试在功能上为:
10 + (0 % 7) == 0 => false (10)
10 + (1 % 7) == 0 => false (11)
10 + (2 % 7) == 0 => false (12)
等等
显然,对于任何
num
>0,您永远不会满足该条件。将您的测试更改为(num+i)%7==0
,您会发现它可以按预期工作。您是一个天使。哈哈,谢谢你,克里斯!你是个天使。哈哈,谢谢你,克里斯!