アプリ版:「スタンプのみでお礼する」機能のリリースについて

0から12までの値nを入力し、nと階乗n!の値を表示しなさいという問題です。
前にこのプログラムで複数個、同時には計算できない問題を自分で解決したのですがこんどは0が計算できないようです。

System.StackOverflowException' のハンドルされていない例外が WindowsApplication1.exe で発生しました。 とでます

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim n As Long
Dim f As Long

n = CLng(TextBox1.Text)

TextBox2.Text = CStr(Recur(n))
End Sub

Public Function Recur(ByVal arg As Long) As Long ←ここにエラーが
If arg = 1 Then
Recur = arg
Exit Function
End If
Recur = arg * Recur(arg - 1)
End Function
End Class

というプログラムです。分かる方よろしくお願いします。
実行エラーです。

A 回答 (2件)

「0! = 1 と約束されている」という事なので、1の時同様、argが0なら、1を戻しておしまいとしておくしかないのではないでしょうか。


Recur = arg * Recur(arg - 1) ← この部分が0に対しては適用できません(階乗の定義から外れる)
Wikipedia等でお調べ下さい。
    • good
    • 0

現状では 0が来ると無限再帰になりますね。


----
If arg = 1 Then
Recur = arg
----
のところを
----
If arg <= 1 Then
Recur = 1
----
に変更してはいかがでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!