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
这样的调用在真正的计算机上终止。而且,它们不是尾部递归的。你肯定会搞砸你的工作或你的时间限制。所以这是一个研究理论性质的例子,这些理论性质在现实中是无用的
换句话说:嗯,你到底在做什么?换句话说:嗯,你到底在做什么?我猜是“家庭作业”。-)谢谢你的详细回答。是的,这是家庭作业。只是想确定我的答案是正确的。