我与朋友争吵,因为我不认为<div class="row clearfix">
<div class="vertical">a</div> // vertical class first
<div class="horizontal">b</div>
</div>
<div class="row clearfix">
<div class="horizontal">c</div> // horizontal class first
<div class="vertical">d</div>
</div>
<div class="row clearfix">
<div class="vertical">f</div> // vertical class first
<div class="horizontal">g</div>
</div>
是递归,但他说这是因为它自称。
我不认为这是因为一个fib_2()
没有返回结果用作另一个fib_2()
的参数。
我认为fib_2()
与fib_2()
相同,它是迭代,而不是递归。
这是一个递归还是没有?
fib_3()
答案 0 :(得分:5)
fff
不是递归的,因为它不会调用自身。它调用具有递归实现的fib_2
,但仅使fff
方法递归是不够的。
fib_2
是教科书递归的:它有count == n
的基本案例,它有一个递归分支,用新值{{fib_2
调用a
1}},b
和c
。
答案 1 :(得分:2)
fib_2是递归的。 fff不是。
第一次调用fib_2使用返回(因此&#39;使用&#39;)第二次调用的结果。
或正式:
递归由两个属性定义:
你的如果在fib_2内部履行了第一个属性。 对fib_2的调用实现了第二次。
fib_3 是一个迭代。
fib_2 不等于fib_3! 当且仅当它们为每个给定输入产生相同的输出时,两个函数是相等的(以数学方式)! fib_2和fib_3具有不同的参数,因此这不是真的。
fib_3
可能等于fff
和/或fib_1
为了以计算机科学的方式实现平等,你必须考虑副作用等问题。
答案 2 :(得分:1)
public static int fib_2(int a, int b, int n, int c, int count) {
if (count == n) {
return c;
}
int tmp = b;
b = a + b;
a = tmp;
c = b;
++count;
return fib_2(a, b, n, c, count);
}
我认为在这段代码中正在发生冲击。