hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
RecursiveCall - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ

HSPによる再帰呼び出し

イントロダクション

再帰呼び出しとは次のようにある処理の中で再び自分自身を呼び出すことを指す。

Everything is expanded.Everything is shortened.
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
#module
#deffunc refunc1 int n
    if n<0: return        ; 終了条件
    mes n
    refunc1 n-1            ; 2) 命令の中で自分自身を呼び出している
    return
#defcfunc refunc2 int n
    if n<=0: return n    ; 終了条件
    mes refunc2(n-1)    ; b) 関数の中で自分自身を呼び出している
    return n
#global
 
refunc1 5                ; 1) まず命令を使う
mes refunc2(5)            ; a) まず関数を使う

必須条件

再帰は処理の中で自分自身を再び呼び出すので、誰かが止まるよう注意してやらなければ永遠と自分を呼び出してしまう。
そのため終了条件となるものが必要になり、この終了条件はその処理内容に応じて異なる。

注意点

再帰は自分が呼ばれたときのパラメータをスタックに積みながら深度を増していく。
スタックに積みきれなかった時にはスタックオーバーフローとなる。(実際にはネストに制限を持たせている)
このとき使われるスタックは小ワザ/ポインタを使ってのあれこれを参照してください。

再帰を使ったサンプル群

+  再帰による文字列の往復表示
+  再帰による階乗の計算
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2009-10-31 (土) 22:16:43 (1498d)