初歩的な質問だと思うのですが、如何しても分かりません。
以下のFunction関数ですが、a の値が 1 → 10 まで行くのは分かるのですが、
その後の動きが理解できません。何故 10 → 1 へ Sum を足していくのでしょうか?
私が苦しんでいる「デストラクタ」に関係するのでしょうか?
#N88BASIC
Function Sum(a As Long, b As Long) As Long
IF a>b Then
Sum=0
Exit Function
End If
print a,Sum
Sum=a+Sum(a+1,b)
print a,Sum
End Function
Dim answer As Long
answer=Sum(1,10)
print
Print answer
Function関数について
Re: Function関数について
> 初歩的な質問だと思うのですが、如何しても分かりません。
> 以下のFunction関数ですが、a の値が 1 → 10 まで行くのは分かるのですが、
> その後の動きが理解できません。何故 10 → 1 へ Sum を足していくのでしょうか?
これは「再帰呼び出し」といい,自分自身の関数の計算結果を用いて計算するものです。
この例ですと,
Sum(1, 10) は 1+Sum(2, 10) に等しい → Sum(2, 10) の結果を用いて計算される
Sum(2, 10) は 2+Sum(3, 10) に等しい → Sum(3, 10) の結果を用いて計算される
Sum(3, 10) は 3+Sum(4, 10) に等しい → Sum(4, 10) の結果を用いて計算される
・
・
・
Sum(9, 10) は 9+Sum(10, 10) に等しい → Sum(10, 10) の結果を用いて計算される
Sum(10, 10) は 10+Sum(11, 10) に等しい → Sum(11, 10) の結果を用いて計算される
Sum(11, 10) は 0 である
すなわち,数値の大きいものを先に計算してしまわないと最終的な結果が出せないため「10」→「1」の順になるのです。
慣れるまで考え方が難しいですが,場合によってはとても有効な概念なので,少しずつ慣れて行って下さい。
※ディレクトリ検索とか(↓とか)に再帰呼び出しはとても有効です。
http://www.discoversoft.net/forum/viewtopic.php?t=137
> 私が苦しんでいる「デストラクタ」に関係するのでしょうか?
関係ないです。
デストラクタとは,クラスの変数(インスタンス)を作成する時と破棄するときにセットで行いたいことを記述するものです(作成時についてはコンストラクタ,破棄時についてはデストラクタ)。
malloc/freeとかのような「開始時にメモリを確保し,終了時にメモリの解放が必要」な処理に使うことが多いです。
> 以下のFunction関数ですが、a の値が 1 → 10 まで行くのは分かるのですが、
> その後の動きが理解できません。何故 10 → 1 へ Sum を足していくのでしょうか?
これは「再帰呼び出し」といい,自分自身の関数の計算結果を用いて計算するものです。
この例ですと,
Sum(1, 10) は 1+Sum(2, 10) に等しい → Sum(2, 10) の結果を用いて計算される
Sum(2, 10) は 2+Sum(3, 10) に等しい → Sum(3, 10) の結果を用いて計算される
Sum(3, 10) は 3+Sum(4, 10) に等しい → Sum(4, 10) の結果を用いて計算される
・
・
・
Sum(9, 10) は 9+Sum(10, 10) に等しい → Sum(10, 10) の結果を用いて計算される
Sum(10, 10) は 10+Sum(11, 10) に等しい → Sum(11, 10) の結果を用いて計算される
Sum(11, 10) は 0 である
すなわち,数値の大きいものを先に計算してしまわないと最終的な結果が出せないため「10」→「1」の順になるのです。
慣れるまで考え方が難しいですが,場合によってはとても有効な概念なので,少しずつ慣れて行って下さい。
※ディレクトリ検索とか(↓とか)に再帰呼び出しはとても有効です。
http://www.discoversoft.net/forum/viewtopic.php?t=137
> 私が苦しんでいる「デストラクタ」に関係するのでしょうか?
関係ないです。
デストラクタとは,クラスの変数(インスタンス)を作成する時と破棄するときにセットで行いたいことを記述するものです(作成時についてはコンストラクタ,破棄時についてはデストラクタ)。
malloc/freeとかのような「開始時にメモリを確保し,終了時にメモリの解放が必要」な処理に使うことが多いです。
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================
' Sinryow Game Home Page - http://www.sinryow.net/
' Sinryow ActiveBasic Center - http://ab.sinryow.net/
' ============================================================