递归实验的三个作业实验(阶乘,杨辉三角,汉诺塔,回文)

部分一

使用计算机计算组合数:

(1)使用组合数公式利用n!来计算

                     

(2)使用递推的方法用杨辉三角形计算

 

(3)使用递归的方法用组合数递推公式计算

 

 

设计思路:用递归解决n!问题,然后将上述公式解决。f(n)=n*f(n-1);

 

程序流程图:

运行结果截图:

程序源代码:

第一个:

package digui0101;

import java.util.Scanner;

public class AAA

{

    public static void main(String[] args)

    {

        int k,n,a,s,d,f;

        Scanner input =new Scanner(System.in);

        System.out.println("请输入k,n");

        k=input.nextInt();

        n=input.nextInt();

        if(k>n)

        {

            System.out.println("错误");

            System.exit(0);

        }

        a=jiecheng(n);

        s=jiecheng(k);

        d=jiecheng(n-k);

        f=a/(s*d);

        System.out.println(f);

    }

    public static int jiecheng(int x)

    {

        int a;

        if(x==1)a=1;

        else a=x*jiecheng(x-1);

        return a;  

    }

}

第二个:

package yanghuisanjiao;

import java.util.Scanner;

public class AA

{

    public static void main(String[] args)

    {

        Scanner input =new Scanner(System.in);

        int n;

        System.out.println("请输入杨辉三角层数");

        n=input.nextInt();

        aaa(n);

    }

    public static void aaa(int n)

    {

        int i,j;

        int[][] q=new int[n][n];

         for(i = 0;i < n ;i++)

         {

             q[0][1]=0;

             q[i][0]=1;

             q[i][i]=1;

         }

         for(i=1;i<n;i++)

         {

            for(j=1;j<i;j++)

            {

                q[i][j]=q[i-1][j-1]+q[i-1][j];

            }

         }

         for(i=0;i<n;i++)

         {

            for(j=0;j<=i;j++)

            {

                if(j!=i)System.out.print(q[i][j]);

                else System.out.println(q[i][j]);

            }

         }

    }

}

 

第三个:

package digui0102;

import java.util.Scanner;

public class AAAA

{

    public static void main(String[] args)

    {

        int k,n,a,s,d;

        Scanner input =new Scanner(System.in);

        System.out.println("请输入k,n");

        k=input.nextInt();

        n=input.nextInt();

        if(k>n)

        {

            System.out.println("错误");

            System.exit(0);

        }

        a=jiecheng(n)/(jiecheng(k-1)*jiecheng(n-k-1));

        s=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));

        d=a+s;

        System.out.println(d);

    }

    public static int jiecheng(int x)

    {

        int a;

        if(x==1)a=1;

        else a=x*jiecheng(x-1);

        return a;  

    }

}

部分二:汉诺塔

设计思想:用递归解决问题,由64-->63-->...-->1。如果要解决64个,就要先把前63个从柱子A移动到柱子B,再把第64个块移动到柱子C然后将前63个从柱子B移动到柱子C。

移动前63个块,就要先移动前62个块。。。依次类推到剩下最顶上的一个。

流程图:                        

 

运行结果截图:

程序代码:import java.util.Scanner;

public class Hanoi

{

    public static void main(String[] args)

    {

        int n;

        Scanner input =new Scanner(System.in);

        System.out.println("请输入有n层塔");

        n=input.nextInt();

        hhh(n,'a','b','c');

    }

    public static void hhh(int n,char a,char b,char c)

    {

        if(n==1)aaa(a,c);

        else

        {

            hhh(n-1,a,c,b);

            aaa(a,c);

            hhh(n-1,b,a,c);

        }

    }

    public static void aaa(char a,char b)

    {

        System.out.println(a+"-->"+b);

    }

}

部分三:回文

设计思想:递归解决:找出字符串长度x,找到字符串第一个字符n和最后一个字符m进行比较,再找第二个字符和第x-1个字符比较,直到找出中间两个字符比较。用布尔型变量输出true或false。

程序流程图:                        

运行结果截图:

程序源代码:package huiwen;

import java.util.Scanner;

public class palindrome

{

    public static void main(String[] args)

    {

        Scanner input =new Scanner(System.in);

        int n,m;

        String x;

        System.out.println("请输入字符串");

        x=input.next();

        boolean a;

        n=0;

        m=x.length() - 1;

        a=aaa(x,n,m);

        System.out.println("判断是否是回文结果为:"+a);

    }

    public static boolean aaa(String x,int n,int m)

    {

        if(n==m||m-n==1)

        {

            if(x.charAt(n)==x.charAt(m))return true;

            else return false;

        }

        else

        {

            if(x.charAt(n)==x.charAt(m)&&aaa(x,n+1,m-1)==true)

            {

                return true;

            }

            else return false;

        }

    }

}

转载于:https://www.cnblogs.com/mhj666/p/7664278.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值