質問
再帰関数の練習プログラムを書いています。
最初にmy_pow関数を作成しスカラー値を返す関数を作成しました。それはキレイに書けました。
次にバイト配列からshort配列に変換するToShort関数を作成しました。戻り値は配列です。
※本来は別の書き方で出来ることは知っています。
※配列を返す再帰関数の練習として良い題が思い浮かびませんでした。
ToShort関数は問題なく動作します。
しかし、再帰はこんなにも無駄な書き方になるのでしょうか。
気になっている点として第二引数(results)がキレイに書けそうな気がしますが良い改善方法が思い浮かびません。
何か良い方法はありますでしょうか?
第二引数(results)を付けるような書き方になるのは、戻り値が配列になる再帰関数の場合しょうがないのでしょうか?
c#
1using System; 2using System.Collections; 3using System.Collections.Generic; 4using System.Linq; 5 6namespace MyProgram 7{ 8 class Program 9 { 10 static List<short> ToShort(byte[] bytes, List<short> results = null) 11 { 12 if (results == null) 13 { 14 results = new List<short>(); 15 } 16 17 if (bytes.Length >= 2) 18 { 19 // short に変換する 20 results.Add(BitConverter.ToInt16(bytes, 0)); 21 22 // 2バイトずらす 23 bytes = bytes.Skip(2).ToArray(); 24 } 25 26 if (bytes.Length == 0) 27 { 28 return results; 29 } 30 else 31 { 32 return ToShort(bytes, results); 33 } 34 } 35 36 static void Main(string[] args) 37 { 38 var bytes = new byte[] 39 { 40 1, 0, // (short)1 41 2, 0, // (short)2 42 3, 0 // (short)3 43 }; 44 45 foreach (var x in ToShort(bytes)) 46 { 47 Console.WriteLine(x); 48 } 49 } 50 } 51} 52
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/04/30 14:44