2017-10-26 9 views
0

私は整数とリストを渡す再帰関数を作成しようとしています。 「 - 」私は特定の数の追加したい次のようにリストの長さが整数未満の場合は、リストに(ダッシュ):私は、スタックオーバーフローを取得し、私はよく分からないが再帰関数でスタックオーバーフロー

let rec dashes (longest, l1) = 
    if length l1 = longest then l1 
    else ["-"]@[email protected](longest,l1);; 

なぜ。

+2

まったく同じ引数を使用して関数を再帰的に呼び出すと、無限ループが発生します。そして、それは尾部の再帰的なものではないので、スタックのオーバーフローを引き起こします。 – glennsl

答えて

2

dashesへの再帰呼び出しでは、元のl1引数が渡されるため、リストの長さは増加せず、終了条件はfalseのままです。