Sab*_*ber -4 java iteration recursion
我与朋友争吵,因为我不认为fib_2()是递归,但他说这是因为它自称.
我不认为这是因为fib_2()没有一个返回结果用作另一个的参数fib_2().我认为fib_2()是相同的fib_3(),它是一个迭代,而不是递归.
那么它是递归还是不是?
public class Demo {
public static void main(String[] args) {
System.out.printf("fib_1 -> %d\n", fib_1(10));
System.out.printf("fib_2 -> %d\n", fff(10));
System.out.printf("fib_3 -> %d\n", fib_3(10));
}
//This is recursion
public static int fib_1(int n) {
if (n == 1 || n == 2)
return 1;
return fib_1(n - 1) + fib_1(n - 2);
}
//Is this recursion or not ?
public static int fff(int n) {
int a = 1, b = 1, c = 0, count = 2;
return fib_2(a, b, n, c, count);
}
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);
}
public static int fib_3(int n) {
int a = 1, b = 1;
for (int i = 2; i < n; i++) {
int temp = b;
b = a + b;
a = temp;
}
return b;
}
}
Run Code Online (Sandbox Code Playgroud)
fff不是递归的,因为它不会调用自身.它调用fib_2哪个具有递归实现,但这不足以使该fff方法递归.
fib_2,在另一方面,是教科书递归的:它有一个基本情况count == n,它有一个递归分支调用fib_2与新价值a,b和c.
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |