根据给定的TestUnit编写函数

时间:2010-05-18 03:50:10

标签: function reverse-engineering

我需要编写一个函数来满足这个输入 - >输出列表:

0 -> 0
1 -> 1
3 -> 2
4 -> 3
5 -> 5
7 -> 13
9 -> 34

f(x)= ??

3 个答案:

答案 0 :(得分:2)

嗯,这非常容易......如果您不关心过度拟合,那么您可以这样做:

switch(input)
     case 0: report 0
     case 1: report 1
     case 3: report 2
     ...
     default: report whatever

如果您想要一个好的解决方案,您可能需要更多的问题约束。您还可以考虑绘制函数图形以查看是否存在任何明显的模式,或者可能显示所涉及的位。知道输入和输出是整数值还是实数值(该函数应该是连续的还是离散的?)也是有用的。没有这些信息,它有点难以帮助。

修改
显示缺少的数字有助于:

0 - > 0
1 - > 1
2 - > 1
3 - > 2
4 - > 3
5 - > 5
6 - > 8
7 - > 13个
8 - > 21
9 - > 34个

(它是Fibonnaci数:f(x)= f(x-1)+ f(x-2),其中f(0)= 0且f(1)= 1)。

PS
这是dynamic programming或memoization特别有用的函数。

答案 1 :(得分:2)

Eureqa

解决

round(exp(0.4807*input - 0.799938))

答案 2 :(得分:1)

我不知道这是否是家庭作业,但这是一个非常着名的序列。 (相当大的)提示是f(n)取决于f(n-1)和f(n-2)。如果你不关心被告知答案,click here。实现序列非常简单地以递归方式完成,但是如果你遇到问题就编辑你的帖子并指定你被困在哪个部分