为什么我的GoLang算法会陷入无限循环?

时间:2019-01-07 22:38:55

标签: algorithm go

我一直试图以多种方式解决以下问题(递归地,使用do while循环的Go版本和for循环)。但是他们每个人都陷入无限循环。我尝试在JavaScript中使用相同的解决方案,并且效果很好。有人可以帮我理解为什么下面的解决方案无法在无限循环中工作吗?

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

1 个答案:

答案 0 :(得分:10)

您的问题是运算符优先级。 %运算符的优先级高于+运算符,因此如果您的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,您应该会发现它可以正常工作。