package question10;
/**
* @Classname Solution2
* @Description TODO
* @Date 2020/3/31 17:02
* @Created by mmz
*/
public class Solution2 {
static int getN(int number){
if(number == 0 ){
return 0;
}
if(number == 1){
return 1;
}
return getN(number-1)+getN(number-2);
}
public static void main(String[] args) {
System.out.println(getN(6));
}
}
很容易写出来这种递归的方式。
但是会有效率问题,因为很有节点是重复的,而且重复的节点数会随着n个增大而急剧加,这意味着计算量会随着n的增大而急剧正大,事实上,用递归方式计算的时间复杂度是以n的指数的方式递增的。
所以,用for循环来做,会增加效率,减少时间。
package question10;
/**
* @Classname Solution3
* @Description TODO
* @Date 2020/3/31 17:08
* @Created by mmz
*/
public class Solution3 {
static int getN(int number){
int a = 0;
int b =1;
int result = 0;
if(number <=0){
return a;
}
if(number==1){
return b;
}
for(int i = 2;i<=number;++i){
result = a+b;
a = b;
b= result;
}
return result;
}
public static void main(String[] args) {
System.out.println(getN(6));
}
}
记得用中间变量,不用递归,这些效率会高一些。