二つ以上の関数を相互に再帰呼び出しするという手法
以下は、sin(1°) と cos(1°) の値だけ知ってれば加法定理で sin(整数°) と cos(整数°) が全部求められるというもの。
一年生のときの演習課題に出て、今でもよく思い出す例題。
モカが VisualBasic も楽しいからというので、初めて VB で書いてみた。
加法定理と言えば、うちの高校は男子校だけあって、とんでもなく下品な語呂合(ry
再帰といえば、関数型言語の ML(meta language) を思い出す。
うちの研究所の敷地内にも ML の開発をしているチームがいる。
ML では、リストの生成からループ処理まで、なんでもかんでも再帰で書く(というイメージを持っている)。
再帰の考え方は美しいが、でも、ここまでひたすらに再帰を使いまくる言語を愛してしまう人たちは変態なんじゃないのと思う。
「変態」は称賛の言葉である。
念のため。
以下は、sin(1°) と cos(1°) の値だけ知ってれば加法定理で sin(整数°) と cos(整数°) が全部求められるというもの。
一年生のときの演習課題に出て、今でもよく思い出す例題。
モカが VisualBasic も楽しいからというので、初めて VB で書いてみた。
Public Class Form1 Private Function RecursiveCos(ByVal angleDegree As Integer) As Double If (Math.Abs(angleDegree) = 1) Then Return 0.99984769515639127 ElseIf (angleDegree = 0) Then Return 1 Else Dim arg As Double = angleDegree / 2 Dim a As Integer = Math.Floor(arg) Dim b As Integer = Math.Ceiling(arg) Return RecursiveCos(a) * RecursiveCos(b) - RecursiveSin(a) * RecursiveSin(b) End If End Function Private Function RecursiveSin(ByVal angleDegree As Integer) As Double If (Math.Abs(angleDegree) = 1) Then Return 0.017452406437283512 * Math.Sign(angleDegree) ElseIf (angleDegree = 0) Then Return 0 Else Dim arg As Double = angleDegree / 2 Dim a As Integer = Math.Floor(arg) Dim b As Integer = Math.Ceiling(arg) Return RecursiveSin(a) * RecursiveCos(b) + RecursiveCos(a) * RecursiveSin(b) End If End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim var As Integer If (Not Integer.TryParse(TextBox1.Text, var)) Then MsgBox("FormatException") Return End If If (RadioButton1.Checked) Then Label1.Text = RecursiveSin(var).ToString() Else Label1.Text = RecursiveCos(var).ToString() End If End Sub End Class
加法定理と言えば、うちの高校は男子校だけあって、とんでもなく下品な語呂合(ry
再帰といえば、関数型言語の ML(meta language) を思い出す。
うちの研究所の敷地内にも ML の開発をしているチームがいる。
ML では、リストの生成からループ処理まで、なんでもかんでも再帰で書く(というイメージを持っている)。
再帰の考え方は美しいが、でも、ここまでひたすらに再帰を使いまくる言語を愛してしまう人たちは変態なんじゃないのと思う。
「変態」は称賛の言葉である。
念のため。
他の言語はどうゆう仕様なのか知らないけど、VBは簡単にコントロールを作れることや、一行ずつデバッグしてくれるのが初心者には嬉しい。
さらにうちの会社ではコントロールに独自の改良を加えゴニョゴニョ…
FlashDevelop は手打ちで GUI コンポーネントを配置するので、初期設定や微調整が面倒だったりします。