博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归实验的三个作业实验(阶乘,杨辉三角,汉诺塔,回文)
阅读量:4954 次
发布时间:2019-06-12

本文共 2901 字,大约阅读时间需要 9 分钟。

部分一

使用计算机计算组合数:

(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

你可能感兴趣的文章
AngularJs表单验证
查看>>
静态方法是否属于线程安全
查看>>
02号团队-团队任务3:每日立会(2018-12-05)
查看>>
SQLite移植手记1
查看>>
C# windows程序应用与JavaScript 程序交互实现例子
查看>>
HashMap详解
查看>>
js05-DOM对象二
查看>>
mariadb BINLOG_FORMAT = STATEMENT 异常
查看>>
C3P0 WARN: Establishing SSL connection without server's identity verification is not recommended
查看>>
iPhone在日本最牛,在中国输得最慘
查看>>
动态方法决议 和 消息转发
查看>>
WPF自定义搜索框代码分享
查看>>
js 基础拓展
查看>>
SpringBoot访问html访问不了的问题
查看>>
{width=200px;height=300px;overflow:hidden}
查看>>
C#生成随机数
查看>>
CSS基础学习 20.CSS媒体查询
查看>>
2019春季第十一周作业
查看>>
洛谷P4591 [TJOI2018]碱基序列 【KMP + dp】
查看>>
iOS CoreData介绍和使用(以及一些注意事项)
查看>>