1,1,2,3,5,8,13。。。
规律就是后面的一个数等于前面两个数的和。
public class Feibonaqie {
public static void main(String[] args) {
//1,1,2,3,5,8
int num = getNumByLoop(6);
int num1 = getNumByRecursor(7);
System.out.println(num);
System.out.println(num1);
}
//循环实现
private static int getNumByLoop(int n) {
//定义前两个数
int num1 = 1;
int num2 = 1;
int num3 = 0;
if (n == 1) return 1;
if (n == 2) return 1;
//经观察,求第n个数,循环的次数为n-2
for (int i = 0; i < n - 2; i++) {
//将原本2位置的数当做1位置的数,累加的结果作为2位置的数
num3 = num1 + num2;
num1 = num2;
num2 = num3;
}
return num3;
}
//递归实现
public static int getNumByRecursor(int n) {
//递归一定要有结束条件
if (n == 1 || n == 2) {
return 1;
}else{
return getNumByRecursor(n - 1) + getNumByRecursor(n - 2);
}
}
}
递归是相当耗费资源的,就像细胞分裂一样,要最终都分解到不能分解才能得出结果。而使用循环只不过循环了n-2次。递归经常用在树的遍历中。例如遍历某文件夹下的所有文件。递归是没效率可言的。
研究递归,最关键是的,找到返回条件。推荐电影《盗梦空间》,经典应用八皇后,汉诺塔
网友评论