Почему мой алгоритм GoLang идет по бесконечному циклу? - PullRequest
0 голосов
/ 08 января 2019

Я пытался решить проблему ниже несколькими способами (рекурсивно, с 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                   

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 голосов
/ 08 января 2019

Ваша проблема - приоритет оператора. Оператор% имеет более высокий приоритет, чем оператор +, поэтому, если ваш 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, и вы увидите, что он работает как положено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...