Я пишу алгоритм Евклида на VB. net, но по какой-то причине он не работает, и я почти уверен, что мой logi c правильный. где я ошибаюсь? - PullRequest
1 голос
/ 26 мая 2020

Он отлично работает, если я помещаю числа, которые делятся друг на друга (например, 10 и 5, 20 и 10), но не работает, если числа не делятся друг на друга (например, 44 и 46. Вот код:

Public Class Form1
Dim num1, num2, temp, r As Integer
Function Algo(num1, num2)
    If (num1 > num2) Then
        temp = num2
        num2 = num1
        num1 = temp
    End If
    If (num2 Mod num1 = 0) Then
        Return num1
    Else
        r = num2 Mod num1
        num2 = num1
        num1 = r
        Algo(num1, num2)
    End If
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim a1, a2 As Integer
    a1 = Val(FirstNum.Text)
    a2 = Val(SecondNum.Text)
    GCD.Text = Val(Algo(a1, a2))
End Sub

он просто показывает 0 в качестве ответа, если введенные числа не делятся: End Class Изображение проблемы, с которой я столкнулся

1 Ответ

1 голос
/ 26 мая 2020

Эта строка:

Algo(num1, num2)

Вместо этого должно быть следующее:

Return Algo(num1, num2)

Ваш al go (вероятно) в порядке, но когда вы go рекурсивно это не t ничего не возвращает, поэтому вы получаете ноль.

Удачи!

...