Recursion 如何在Ocaml中编写递归字符串和其他参数
我想像Recursion 如何在Ocaml中编写递归字符串和其他参数,recursion,functional-programming,ocaml,Recursion,Functional Programming,Ocaml,我想像string(2^n)那样编码 前 但是, 它已溢出。如何仅使用递归函数编写代码? 我不想使用其他参数。像'n->n-1' 如果我在字符串128中放入“a”,然后重复“a”128次。我不确定您为什么不想使用额外的参数,但您可以使用字符串的长度作为终止条件。由于不清楚如何处理具有多个字符的初始字符串,因此这里有两种可能的版本: let rec string128 s = if String.length s >= 128 then s else string128 (s^s);;
string(2^n)
那样编码
前
但是,
它已溢出。如何仅使用递归函数编写代码?
我不想使用其他参数。像'n->n-1'
如果我在字符串128中放入“a”,然后重复“a”128次。我不确定您为什么不想使用额外的参数,但您可以使用字符串的长度作为终止条件。由于不清楚如何处理具有多个字符的初始字符串,因此这里有两种可能的版本:
let rec string128 s = if String.length s >= 128 then s else string128 (s^s);;
let string128bis s =
let orig_length = String.length s in
let rec aux s =
if String.length s >= 128 * orig_length then s else aux (s^s)
in aux s;;
string128
将串接字符串,直到结果至少为128个字符宽string128bis
将等待生成的字符串比原始输入长128倍。string128“a”
和string128bis a
都将返回128a
,但是string128“abcd”
将返回一个128个字符的重复字符串abcd
,而string128bis“abcd”
将有512个字符长。It“溢出”因为任何字符串与自身的串联都不会产生“
”的基本大小写,所以它将无限递归。因为“likestring(2^n)
”没有任何意义,所以不清楚您试图做什么。如果您可以提供一些输入示例和函数的预期输出,则可能可以破译您想要完成的任务,但否则您必须实际尝试解释它。如果我在string128中输入“a”,则重复“a”128次。这就是我想做的。好吧,这更有意义。你能更新你的问题以包括那个例子吗?我更新了。在基本情况下,我应该更改什么?我可能不太理解,但为什么不使用另一个参数呢?字符串是常量,它没有递归函数可以用来知道何时停止的其他信息?
let rec string128 s =
match s with
" " -> " "
| _ -> string128 s^s ;;
let rec string128 s = if String.length s >= 128 then s else string128 (s^s);;
let string128bis s =
let orig_length = String.length s in
let rec aux s =
if String.length s >= 128 * orig_length then s else aux (s^s)
in aux s;;