ある金額について日本円の硬貨の組み合わせで何パターン作れるか、というアルゴリズムについて。
ネットで見つけたRubyの模範回答を学習しながらJavaScriptに移植しようとしています。
自分では正しく「翻訳」したつもりが、同じ数値で実行しても挙動が一致せず、悩んでいます。
Forループで再帰する際のカウンターのあたりがRubyとJavaScriptで違うような気がしてはいるのですが、
根本原因がわかっておりません。
ご存知の方、教えていただけると幸いです。よろしくお願いいたします。
Ruby
1**////////////////////////////Ruby 模範コード////////////////////////////** 2@cnt = 0 3 4def change(target, coins, usable) 5 coin = coins.shift 6 if coins.size == 0 then 7 @cnt += 1 if target / coin <= usable 8 else 9 x = target/coin 10 for i in 0..x do 11 minus = coin * i 12 tmp = target - minus 13 z = coins.clone 14 change(tmp, z, usable - i) 15 end 16 end 17end 18 19L_coins = [500, 100, 50, 10,5,1] 20limit = 1000 21N = 50 22 23change(N, L_coins, limit) 24 25puts @cnt
JavaScript
1**////////////////////////////JavaScript コード案////////////////////////////** 2 3 4 5cnt = 0 6 7function change(target, coins, usable){ 8 coin = coins.shift(); 9 10 if (coins.length == 0){ 11 add = Math.floor(target / coin) <= usable ? 1 : 0; 12 cnt = cnt + add; 13 }else{ 14 N = parseInt(target/coin); 15 for(i=0;i<=N;i++){ 16 clone = coins.slice(0); 17 tmp = target - (coin * i); 18 change(tmp, clone, usable - i); 19 } 20 } 21} 22 23 24L_coins = [500, 100, 50, 10,5,1]; 25limit = 1000; 26N = 50; 27 28change(N, L_coins, limit); 29console.log(cnt); 30
回答1件
あなたの回答
tips
プレビュー