Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 两个函数的无限计算_F#_F# Interactive - Fatal编程技术网

F# 两个函数的无限计算

F# 两个函数的无限计算,f#,f#-interactive,F#,F# Interactive,我有以下两个功能 let rec f n = if n < 10 then "f" + g (n + 1) else "f" and g n = if n < 10 then "g" + f (n + 1) else "g" 让rec f n= 如果n

我有以下两个功能

let rec f n =
    if n < 10 then "f" + g (n + 1) else "f"
and g n =
    if n < 10 then "g" + f (n + 1) else "g"
让rec f n=
如果n<10,则为“f”+g(n+1),否则为“f”
和g n=
如果n<10,则为“g”+f(n+1),否则为“g”
在这里,我需要找出f是否有任何参数可以开始无限计算

我的直接回答是否定的,因为有一个10的上限,它总是会返回一封信。这是正确的吗

我假设第2行和第4行应该缩进,否则这是无效的F#

理论上 除了输出之外,
g
f
是相同的,我们不关心输出。因此,我们不妨看看以下函数,它具有相同的终止属性,但会丢弃输出:

let rec f n = if n < 10 then f (n + 1)
让rec fn=如果n<10,那么f(n+1)
f
的输入类型是
int
,它是一个32位有符号整数。它只允许从-2147483648到2147483647的值(
System.Int32.MinValue
System.Int32.MaxValue
)。没有其他可代表的案例

如果输入值为10或更高,则该对象终止,否则只需累加,直到达到10,然后终止

实际上 也就是说,问题中的函数连接字符串的方式具有O(n²)时间复杂性。我认为您不想等待像
f System.Int32.MinValue
这样的调用在真正的计算机上终止。而且,它们不是尾部递归的。你肯定会搞砸你的工作或你的时间限制。所以这是一个研究理论性质的例子,这些理论性质在现实中是无用的


换句话说:嗯,你到底在做什么?

换句话说:嗯,你到底在做什么?我猜是“家庭作业”。-)谢谢你的详细回答。是的,这是家庭作业。只是想确定我的答案是正确的。