public class DiguiTest {
public static void main(String[] args) throws Exception
{
// System.out.println(fac(5));
// Hannuota(7,'A','B','C');
// System.out.println(feibo(38));
// System.out.println(forFeibo(440));
// int a[]={2,3,5,7,9,12,34,67,89};
// System.out.println(erFen(a,1,0,a.length));
// example1(8);
System.out.println(chouRen(30,10));
System.out.println(maxPublic (2,6));
}
/**
* 递归算法
*/
/**
* 阶乘运算
* @param n
* @return
* @throws Exception
*/
public static int fac(int n) throws Exception
{
if(n==0)
throw new Exception("参数有误!");
if(n==1)
return 1;
else
return n*fac(n-1);
}
/**
* 汉诺塔
* @throws Exception
*/
public static void Hannuota(int n,char from,char cen,char to) throws Exception
{
if(n<=0)
{
throw new Exception("参数有误!");
}
if(n==1)
{
System.out.println("把1盘子从"+from+"移到"+to);
return;
}
Hannuota(n-1,from,to,cen);
System.out.println("把"+n+"盘子从"+from+"移到"+to);
Hannuota(n-1,cen,to,from);
}
/**
* 斐波那切数列
*/
public static int feibo(int n)
{
if(n==0||n==1)
return n;
else
{
return feibo(n-1)+feibo(n-2);
}
}
/**
* 二分查找
*/
public static int erFen(int[] a,int x,int low,int high)
{
while(low<=high)
{
int mid=(low+high)/2;
if(a[mid]==x)
return mid;
else if(a[mid]>x)
return erFen(a,x,low,mid-1);
else
return erFen(a,x,mid+1,high);
}
return -1;
}
/**
* 斐波那切数列循环结构实现
*
*/
public static int forFeibo(int n)
{
if(n==0||n==1)
return n;
else
{
int back=1,backback=0,current=0;
for(int i=2;i<=n;i++)
{
current=backback+back;
backback=back;
back=current;
}
return current;
}
}
/**
* 例6.4设计
*/
public static void example1(int n)
{
if(n<1)
return;
for(int i=0;i<n;i++)
{
System.out.print(n+" ");
}
System.out.println();
example1(n-1);
}
/**
* 委员会选人问题
*/
public static int chouRen(int n,int k)
{
if(k==1&&k!=n)
return n;
else if(n==k)
return 1;
else
{
return chouRen(n-1,k)+chouRen(n-1,k-1);
}
}
/**
public static int getMax(int[] a,int low,int high)
{
if(high==0)
return a[high];
int x=getMax(a,0,high-1);
if(a[high]>=x)
return a[high];
else
return x;
}
public static void show(int n)
{
if(n==0)
return;
show(n-1);
for(int i=0;i<n;i++)
{
System.out.print(n+" ");
}
System.out.println();
}
**/
/**
* 最大公约数循环算法
* @param n
* @param m
* @return
*/
public static int maxPublic (int n,int m)
{
int tm,tn,temp;
if(n<m)
{
tn=m;
tm=n;
}
else
{
tm=m;
tn=n;
}
while(tm!=0)
{
temp=tm;
tm=tn%tm;
tn=temp;
}
return tn;
}
}
java数据结构之递归算法典型题练习
于 2018-08-26 09:58:15 首次发布