3

vbscript で再帰を実装しようとしています。

Function largest_prime_factor (ByVal num)

    For i = 2 to num/2
        If num mod i = 0 Then   'this number is not prime
            largest_prime_factor (num / i)
        End If
    Next

    largest_prime_factor = num ''if at this point, we have reached the largest prime

End Function

ご覧のとおり、これは基本的に、数値の最大の素因数を提供するように設計されたスクリプトです。ただし、このスクリプトは、印刷を実行すると、帰属された数値を吐き出します。デバッグ後、スクリプトが実際に for ループ内の条件に入ることがわかりましたが、その後は再帰しません (つまり、for ループを実行し続け、その時点で終了します)。

VBscript の再帰について何が欠けていましたか? 私も何かを試してみました

largest_prime_factor = largest_prime_factor (num / i)

条件内で、これも機能しませんでした。

4

1 に答える 1

4

上記のコードでは、2 つの小さな間違いを犯しています。

  1. 数値を返す関数を作成しました。再帰的に呼び出している間、さらに処理するために変数 'num' でその数値を取得する必要があります。
  2. 目的の出力を取得した後、ループを終了していないという2番目の間違い。これにより、i = num までさらにループし、すべての場合で答えが 1 になります。

作業コード ---

Function largest_prime_factor (ByVal num)
 For i = 2 to num/2
        If num mod i = 0 Then   'this number is not prime
              num= largest_prime_factor (num / i)
              Exit For 
        End If
 Next
largest_prime_factor = num ''if at this point, we have reached the largest prime
End Function
于 2012-07-06T04:34:35.760 に答える