如何为泰安地区设计一个具有创意的网站?
摘要:泰安做网站,网站设计想法,美耐皿 技术支持 东莞网站建设,线上平面设计培训班目录 一、递归问题 1、斐波那契数列 2、汉诺塔问题 3、全排列问题 4、整数划分问题 二、递归式求解 1、代入法 2、递归树法 3、主定理法 三、 分治问题 1、
泰安做网站,网站设计想法,美耐皿 技术支持 东莞网站建设,线上平面设计培训班目录
一、递归问题
1、斐波那契数列
2、汉诺塔问题
3、全排列问题
4、整数划分问题
二、递归式求解
1、代入法
2、递归树法
3、主定理法
三、 分治问题
1、二分搜索
2、大整数乘法 一、递归问题
1、斐波那契数列 斐波那契数列不用过多介绍#xff0c;斐波那契提出…目录
一、递归问题
1、斐波那契数列
2、汉诺塔问题
3、全排列问题
4、整数划分问题
二、递归式求解
1、代入法
2、递归树法
3、主定理法
三、 分治问题
1、二分搜索
2、大整数乘法 一、递归问题
1、斐波那契数列 斐波那契数列不用过多介绍斐波那契提出的繁殖兔子问题。 斐波那契递推式如下 斐波那契代码
//斐波那契数列
import java.util.Scanner;
public class Fibonacci {public static void main(String [] args){int inputnew Scanner(System.in).nextInt();System.out.println(factorial(input));}public static int factorial(int n){if(n0||n1)return 1;else{return factorial(n-1)factorial(n-2);}}
}2、汉诺塔问题 汉诺塔问题也是一个经典问题。一般分为三个步骤
1把n-1个盘子从A柱移到B柱
2把最底层1个盘子从A柱移到C柱
3把B柱n-1个盘子移到C柱。 完整代码
package RecursionAndDivide;
import java.util.Scanner;
public class Hanoi {public static void main(String[] args){int inputnew Scanner(System.in).nextInt();move(input,A,B,C);} public static void move(int n,char a,char b,char c){if(n1)System.out.println(a-c); //else {move(n-1,a,c,b); //n-1个从a移到bmove(1,a,b,c); //底层1个从a移到cmove(n-1,b,a,c); //n-1个从b移到c}}
}
3、全排列问题 使用递归的方式输出数组中的全排列步骤如下
0判定是否数组中仅有一个数那么输出该排列形式。请注意k作为固定头在每一层进行修改排列顺序的头部
1首先将第一个数与后面的每一个数进行交换这是一个k到m的循环。得到 1,2,3,4,...,n 2,1,3,4,...,n 3,1,2,4,...,n
2计算除第一个数以外后面的全排列。
3交换第一个数与刚刚那个数使数组恢复。 k作为固定头m作为尾一直不改变i作为固定头与循环中交换的数的索引。固定头依赖于第几层递归不同的递归只会改变数组排列的方式不会改变长度而尾不动所以每次输出只需要输出0到m索引的数组数也就是所有数组的数。
完整代码
//全排列问题
public class Permutations {public static void main(String [] args){int []list{1,2,3,4,5};int k0;int mlist.length-1;Perm(list,k,m);} //产生全排列public static void Perm(int []list,int k,int m){if(km) {for(int i0;im;i)System.out.print(list[i]);System.out.println();}else{for(int ik;im;i){swap(list,i,k); Perm(list,k1,m);swap(list,i,k);}}}//交换数组中两个元素public static void swap(int []list,int i,int k){int templist[i];list[i]list[k];list[k]temp;}
}4、整数划分问题 整数划分问题就是把一个正整数拆分成若干个正整数相加的所有方式也可以使用递归来求解。定义p(n)为正整数n的划分总个数q(n,m)为正整数n划分为最大值为m的划分总个数。
