首页 > 解决方案 > 我正在 VB.net 中编写 euclid 的算法,但由于某种原因它不起作用,我很确定我的逻辑是正确的。我哪里错了?

问题描述

如果我输入可被彼此整除的数字(例如 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我面临的问题的图片

标签: vb.net

解决方案


这一行:

Algo(num1, num2)

应该是这样的:

Return Algo(num1, num2)

您的算法(可能)很好,但是当您进行递归时,它不会返回任何内容,这就是您得到零的原因。

玩得开心!


推荐阅读