我有一些运动有问题。 我找到了最长的子串。
示例:
"AGATGCCATTGTCCCCGACAACCAGCCA"
我必须转换为List并查找/搜索最长子字符串并打印结果CCCC
我的功能必须与function search : char list -> unit
我无法使用 Module Str 。
答案 0 :(得分:0)
不确定这个答案是否合适。我相信我应该暗示一下。
回想一下迭代算法,找出数组中的最大数。
int maximum = array[0];
for (i = 1; i < length; i++){
if (array[i] > maximum){
maximum = array[i];
}
}
要将代码转换为递归代码,我们不会随着时间的推移改变值,但在下一次调用中会有不同的参数。
let max_in_list =
let rec aux maximum l = match l with
|[] -> maximum
|x :: xs -> aux (max maximum x) xs in
function
|[] -> invalid_arg "empty list"
|x :: xs -> aux x xs
注意maximum
变量是如何改变的#34;在每次递归调用中,就像迭代中的变异变量一样。
当然,这不是惯用的方式,因为可以使用List.fold_left
来完成递归。
如果你真的不知道如何以递归方式思考&#34;,请先尝试用循环算法,然后&#34;翻译&#34;它进入递归。