算法是一个问题的解决流程和步骤,称之为算法,
分治算法,回溯算法,动态规划算法,贪心算法,并不是指某一个具体的算法,他们仅仅是针对不同的特定问题的解决策略和思想而已,而二分查找,冒泡排序指的是一个具体的算法
递归
程序调用自身的编程技巧称为递归,递归就是把大问题进行拆解,拆解成小问题来求解,递归的策略就是只需少量的程序就可以描述出解题过程所需的多次重复计算,大大减少了程序的代码量
一般来说,递归需要有边界条件,递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
示例1:前n项求和的问题
package 算法;
public class Recursion {
public static void main(String[] args) {
//1,递归的思想进行累加
//test01();
//2,迭代累加
test02();
}
private static void test02() {
int sum =0;
int n=100;
for(int i=1;i<=n;i++){
sum+=i;
}
System.out.println(sum);
}
private static void test01() {
int n=100;
int sum=sum(100);
System.out.println(sum);
}
private static int sum(int n){
if(n==1){//边界条件
return 1;
}
else{
return sum(n-1)+n;//递归的前进段,加上return就是返回段
}
}
}
n的阶乘问题
设变量n=10,求n!的值
package 算法;
public class Recursion {
public static void main(String[] args) {
//3,递归的阶乘问题
test03();
//4,迭代阶乘
test04();
}
private static void test04() {
int product=1;
int n=10;
for(int i=1;i<=n;i++){
product*=i;
}
System.out.print(product);
}
private static void test03() {
int n=10;
int product=factorial(n);
System.out.println(product);
}
private static int factorial(int n) {
if(n==1){
return 1;
}
return factorial(n-1)*n;
}
}
斐波那契数列问题
菲波那切数列为1,1,2,3,5,8,13,21.。。。。。。,它的时间复杂度是2^n
递归求斐波那契数列
package 算法;
public class Recursion {
public static void main(String[] args) {
//递归求斐波那契数列
test05();
}
private static void test05() {
int n=45;
int num=faboniqi(n);
System.out.println(num);
}
private static int faboniqi(int n) {
if(n==1||n==2){
return 1;
}
return faboniqi(n-1)+faboniqi(n-2);
}
}
迭代求斐波那契数列
package 算法;
public class Recursion {
public static void main(String[] args) {
//递归求斐波那契数列
// test05();
//迭代求斐波那契数列
test06();
}
private static void test06() {
int n=45;
int num=getFabonaqie(n);
System.out.println(num);
}
private static int getFabonaqie(int n) {
if(n==1||n==2){
return 1;
}
int first=1;
int second=1;
int current=0;
for(int i=3;i<=n;i++){
current=first+second;
first=second;
second=current;
}
return current;
}
private static void test05() {
int n=45;
int num=faboniqi(n);
System.out.println(num);
}
private static int faboniqi(int n) {
if(n==1||n==2){
return 1;
}
return faboniqi(n-1)+faboniqi(n-2);
}
}