【发布时间】:2017-03-11 10:10:17
【问题描述】:
int factorial ( int n )
{
if ( n == 0)
return 1;
else
return n * factorial (n -1);
}
上面的函数和下面的函数执行相同的功能。实现相同功能的语法不同的代码片段称为 Type-4 代码克隆。它们也被称为语义或功能克隆
int factorial ( int n )
{
int i , fact =1;
for ( i =1; i <= n; i ++)
fact = fact * i ;
return fact;
}
现在,我的问题是如何在不比较它们的输出和签名的情况下确定这两个函数是否被克隆?
【问题讨论】:
-
好吧,它们并不是真正的克隆,因为它们都以完全不同的方式实现相同的功能。
-
绝对没有办法做到这一点
-
它们不是相互克隆的,它们只是提供相同的输出,但实现不同。
-
整个博士论文或像 TeamScale 这样的复杂产品都是围绕这些问题构建的。不要假设一个简单的 SO 问题就可以涵盖这一点。太宽泛了。
-
唯一希望:解释为什么不能这样做:-)
标签: java function methods analysis