ホーム » スタッフ » 斉藤徹 » JavaScriptの再帰の例題

JavaScriptの再帰の例題

再帰呼び出しで分割統治法の考え方のプログラムをJavaScriptで書いたサンプル

単純に、配列の指定範囲の合計を求める関数を、再帰を用いて記述する。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<html>
<head>
</head>
<body>
<p>
このプログラムは、実行結果を console.log() で出力するので、
Ctrl+Shift+I で、JavaScript の console を表示させてね。
</p>
<script type="text/javascript">
// a : 配列
// start : 合計を計算する範囲の戦闘
// end : 合計を計算する範囲の最後+1
// 配列の合計は、配列の先頭 + 残りの合計
function array_sum( a , start , end ) {
console.log( "array_sum:" + start + "," + end ) ;
if ( start == end ) {
console.log( "array_sum(" + start + "," + end + ")=0" ) ;
return 0 ;
} else {
var ans = a[ start ] + array_sum( a , start + 1 , end ) ;
console.log( "array_sum("+start+","+end+")="+ans ) ;
return ans ;
}
}
var array = new Array( 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 ) ;
console.log( array_sum( array , 0 , array.length ) ) ;
// 配列の合計は、データが1個ならその値。
// そうでなければ、配列の前半の合計 + 配列の後半の合計
function array_sum2( a , start , end ) {
console.log( "array_sum2:" + start + "," + end ) ;
if ( start + 1 == end ) {
var ans = a[ start ] ;
console.log( "array_sum2("+start+","+end+")="+ans ) ;
return ans ;
} else {
var mid = Math.floor( ( start + end ) / 2 ) ;
var ans = array_sum2( a , start , mid ) // 配列前半の合計を求める
+ array_sum2( a , mid , end ) ; // 配列後半の合計を求める
console.log( "array_sum2("+start+","+end+")="+ans ) ;
return ans ;
}
}
console.log( array_sum2( array , 0 , array.length ) ) ;
</script>
</body>
</html>
<html> <head> </head> <body> <p> このプログラムは、実行結果を console.log() で出力するので、 Ctrl+Shift+I で、JavaScript の console を表示させてね。 </p> <script type="text/javascript"> // a : 配列 // start : 合計を計算する範囲の戦闘 // end : 合計を計算する範囲の最後+1 // 配列の合計は、配列の先頭 + 残りの合計 function array_sum( a , start , end ) { console.log( "array_sum:" + start + "," + end ) ; if ( start == end ) { console.log( "array_sum(" + start + "," + end + ")=0" ) ; return 0 ; } else { var ans = a[ start ] + array_sum( a , start + 1 , end ) ; console.log( "array_sum("+start+","+end+")="+ans ) ; return ans ; } } var array = new Array( 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 ) ; console.log( array_sum( array , 0 , array.length ) ) ; // 配列の合計は、データが1個ならその値。 // そうでなければ、配列の前半の合計 + 配列の後半の合計 function array_sum2( a , start , end ) { console.log( "array_sum2:" + start + "," + end ) ; if ( start + 1 == end ) { var ans = a[ start ] ; console.log( "array_sum2("+start+","+end+")="+ans ) ; return ans ; } else { var mid = Math.floor( ( start + end ) / 2 ) ; var ans = array_sum2( a , start , mid ) // 配列前半の合計を求める + array_sum2( a , mid , end ) ; // 配列後半の合計を求める console.log( "array_sum2("+start+","+end+")="+ans ) ; return ans ; } } console.log( array_sum2( array , 0 , array.length ) ) ; </script> </body> </html>
<html>
<head>
</head>
<body>
 <p>
  このプログラムは、実行結果を console.log() で出力するので、
  Ctrl+Shift+I で、JavaScript の console を表示させてね。
 </p>
 <script type="text/javascript">
   // a : 配列
   // start : 合計を計算する範囲の戦闘
   // end : 合計を計算する範囲の最後+1
   // 配列の合計は、配列の先頭 + 残りの合計
   function array_sum( a , start , end ) {
     console.log( "array_sum:" + start + "," + end ) ;
     if ( start == end ) {
       console.log( "array_sum(" + start + "," + end + ")=0" ) ;
       return 0 ;
     } else {
       var ans = a[ start ] + array_sum( a , start + 1 , end ) ;
       console.log( "array_sum("+start+","+end+")="+ans ) ;
       return ans ;
     }
   }
   var array = new Array( 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 ) ;
   console.log( array_sum( array , 0 , array.length ) ) ;

   // 配列の合計は、データが1個ならその値。
   // そうでなければ、配列の前半の合計 + 配列の後半の合計
   function array_sum2( a , start , end ) {
     console.log( "array_sum2:" + start + "," + end ) ;
     if ( start + 1 == end ) {
       var ans = a[ start ] ;
       console.log( "array_sum2("+start+","+end+")="+ans ) ;
       return ans ;
     } else {
       var mid = Math.floor( ( start + end ) / 2 ) ;
       var ans = array_sum2( a , start , mid ) // 配列前半の合計を求める
               + array_sum2( a , mid , end ) ; // 配列後半の合計を求める
       console.log( "array_sum2("+start+","+end+")="+ans ) ;
       return ans ;
     }
   }
   console.log( array_sum2( array , 0 , array.length ) ) ;
  </script>
</body>
</html>