List 带递归函数的堆栈溢出

List 带递归函数的堆栈溢出,list,recursion,ocaml,List,Recursion,Ocaml,我正在尝试创建一个递归函数,其中传入一个整数和一个列表。如果列表的长度小于整数,我想在列表中添加一定数量的“-”(破折号),如下所示: let rec dashes (longest, l1) = if length l1 = longest then l1 else ["-"]@l1@dashes(longest,l1);; 但是我得到了堆栈溢出,我不知道为什么。对破折号的递归调用通过原始l1参数,因此列表长度永远不会增长,终止条件仍然为false。对破折号的递归调用通

我正在尝试创建一个递归函数,其中传入一个整数和一个列表。如果列表的长度小于整数,我想在列表中添加一定数量的“-”(破折号),如下所示:

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

但是我得到了堆栈溢出,我不知道为什么。

破折号的递归调用通过原始
l1
参数,因此列表长度永远不会增长,终止条件仍然为false。

破折号的递归调用通过原始
l1
参数,因此列表长度永远不会增长,终止条件仍然为false。

您使用完全相同的参数递归调用函数,导致无限循环。由于它不是尾部递归的,它将导致堆栈溢出,而不是永远循环。您使用完全相同的参数递归调用函数,从而导致无限循环。由于它不是尾部递归的,它将导致堆栈溢出,而不仅仅是永远循环。