理清递归思路(Java)
一、例题
package com.lxf.test;
public class MyTest {
public static void main(String[] args) {
System.out.println("foo1="+foo1(5));
}
/**
* @param n
* @return
*/
static int foo1(int n){
if(n<2) return n;
return foo1(n-1)+foo1(n-2);
}
}
输出:
foo1=5
分析:
foo(5)
foo(4) +foo(3)
foo(3)+foo(2)+foo(2)+foo(1)
foo(2)+foo(1)+foo(1)+foo(0)+foo(1)+foo(0)+1
foo(1)+foo(0)+foo(1)+foo(1)+foo(0)+foo(1)+foo(0)+1
1+0+1+1+0+1+0+1
5
//这其实是斐波那契数列算法
二、对比
package com.lxf.test;
public class MyTest {
public static void main(String[] args) {
System.out.println("foo1="+foo1(5));
System.out.println("foo2="+foo2(5));
}
/**
* @param n
* @return
* foo(5)
* foo(4) +foo(3)
* foo(3)+foo(2)+foo(2)+foo(1)
* foo(2)+foo(1)+foo(1)+foo(0)+foo(1)+foo(0)+1
* foo(1)+foo(0)+foo(1)+foo(1)+foo(0)+foo(1)+foo(0)+1
* 1+0+1+1+0+1+0+1
*/
static int foo1(int n){
if(n<2) return n;
return foo1(n-1)+foo1(n-2);
}
/**
* @param n
* @return
* foo(5)
* 5+4+3+2+1
*/
static int foo2(int n){
if(n<2) return 1;
return n+foo2(n-1);
}
}
输出:
foo1=5
foo2=15

被折叠的 条评论
为什么被折叠?



