【发布时间】:2016-04-26 04:17:52
【问题描述】:
我得到了以下代码:
public class alg
{
public static int hmm (int x)
{
if (x == 1)
{
return 2;
}
return 2*x + hmm(x-1);
}
public static void main (String[] args)
{
int x = Integer.parseInt(args[0]);
System.out.println(hmm(x));
}
}
所以第一个问题是,这个算法算什么? 我刚刚在eclipse中输入并运行了它 所以我可以更好地看到它的作用(之前是伪代码,我不能在这里输入,所以我输入了代码)。我已经意识到这个算法做了以下事情:它将接受输入并将其乘以它的以下数字。 举个例子:
input = 3, output = 12 because 3*4 = 12.
Or Input = 6, output 42 because 6*7 = 42.
好的,下一个问题是我的问题。我被要求分析这个算法的运行时间,但我不知道从哪里开始。
我想说,一开始,当我们定义 x 时,我们已经得到了time = 1
我相信 if 循环也给出了time = 1。
最后一部分,return 2x + alg(x-1) 应该给出“something^x”还是..?
所以最后我们得到了类似“something^x”+ 2的东西,我怀疑这是对的:/
编辑,也设法输入伪代码:)
Input: Integer x with x > 1
if x = 1 then
return 2;
end if
return 2x + hmm(x-1);
【问题讨论】:
-
由于没有循环,所以运行时间与递归次数成正比。由于只有一个递归步骤
hmm(x-1)并假设x > 0,递归的数量就是x - 1。 -
您确定算法会为输入
6返回42吗?算法不返回2^x * x!吗? -
@Codor 如果我是任何法官,它应该返回
x² + x。它通过递归计算等差数列的两倍。 -
我明白了,我看错了。