【Java】遞迴遞推的應用

來源:互聯網
上載者:User

標籤:ring   代碼   ann   數組   ext   es2017   color   直接   als   

利用階乘公式來計算群組合式:

程式設計思想:

根據公式來計算群組合數的大小,從鍵盤輸入n,k的值,設計一個計算階乘的大小,如果輸入的數a為1或0,則直接return 1,否則運用遞迴,計算a-1的階乘,直到a為1時,遞迴結束。

程式流程圖:

程式原始碼:

public static void main(String args[]) {    int n ,k,c;    Scanner in=new Scanner(System.in);    System.out.print("輸入從n個數中選k個數中n,k的值:");    n=in.nextInt();    k=in.nextInt();    System.out.println("結果為:");    c=jiecheng(n)/(jiecheng(k)*jiecheng(n-k));    System.out.println(c);}

public static int jiecheng(int x)
{
  int y=1;
  if(x==1||x==0)
  y=1;
  else y=jiecheng(x-1)*x;
  return y;
}

 

 

 

根據楊輝三角遞推求組合數

程式設計思想:

根據楊輝三角的規律,得出楊輝三角的第n行的第m個的值等於該位置的元素的上一行的左右兩個輸的和,然後根據楊輝三角與組合數的關係即c(n,m)等於楊輝三角的第n+1的第m+1個元素的值,根據這個來寫出組合數的值。

程式流程圖:

 

程式原始碼:

    public static void main(String args[]) {        Scanner sc=new Scanner(System.in);        System.out.print("輸入N值:");        int n=sc.nextInt();        System.out.print("輸入K值:");        int k=sc.nextInt();        int[][] a=new int[n+1][n+1];        for(int i=0;i<n+1;i++)        {                    for(int j=0;j<=i;j++) {                            if(j==0||j==i)                    {                    a[i][j]=1;                    System.out.print(a[i][j]+" ");                    }                else                     {                    a[i][j]=a[i-1][j-1]+a[i-1][j];                    System.out.print(a[i][j]);                    System.out.print(" ");                    }            }            System.out.println();        }                    if(n<2||k==1)             System.out.println("num=1");            else System.out.println("num="+a[n][k-1]+"="+a[n-1][k-2]+"+"+a[n-1][k-1]);    }

 

 

 

運用公式計算群組合數:

程式設計思想:

輸入n,m,兩個數(來組成要求出的組合數)(n>m),如果m=1,則輸出結果n,如果m!=1,則進入遞迴,運用公式,直到進行到n-m=1的時候,結束遞迴,輸出結果。

程式流程圖

程式原始碼:

    public static void main(String args[]) {        Scanner sc=new Scanner(System.in);        System.out.print("輸入N值:");        int n=sc.nextInt();        System.out.print("輸入K值:");        int k=sc.nextInt();        System.out.println("結果為:"+C(n,k));    }    public static int C(int n,int k)    {        if(n<0||k<0||n<k)            return 0;        if(n==k)            return 1;        if(k==1)            return n;        return C(n-1,k)+C(n-1,k-1);    }

 

 

 

用Java實現漢諾塔:

程式設計思想:

1.首先輸入盤子的數量n,如果盤子的數量是1,則直接將編號為1的圓盤從A移到C,遞迴結束。

2.否則:

遞迴,將A上編號為1至n-1的圓盤移到B,C做輔助塔;

直接將編號為n的圓盤從A到C;

遞迴,將B上的編號為1至n-1的圓盤移到C,A做輔助塔。

 

程式流程圖:

 

程式原始碼:

    public static void main(String[] args) {            @SuppressWarnings("resource")            Scanner sc=new Scanner(System.in);            int n;            System.out.println("Please enter the number of your dished(Hanoi Tower):");            n=sc.nextInt();            System.out.println("The number of the times you need to move the dishes is:"+new HanoiTower().hanoiTower(n));            HanoiTower HanoiTower = new HanoiTower();            HanoiTower.move(n, ‘A‘, ‘B‘, ‘C‘);            }        public int hanoiTower(int n) {        if(n==1) return 1;        else return hanoiTower(n-1)*2+1;    }            public void move(int n, char a, char b, char c) {                 if (n == 1)                    System.out.println("盤 " + n + " 由 " + a + " 移至 " + c);               else {                   move(n - 1, a, c, b);                   System.out.println("盤 " + n + " 由 " + a + " 移至 " + c);                   move(n - 1, b, a, c);                }        }

 

 

 

隨意輸入一個任意大小的字串,判斷他是不是迴文字串。

程式設計思想:

從鍵盤隨意輸入一個字串,並將其賦值給一個數組,然後用遞迴進行,若i=j,肯定是遞迴,否則從數組的首元素與尾元素進行比較,若相等,則進行i++與j--,不斷向中間靠攏,直到達到判斷條件 n>=len/2 ,中間若有一次不符合判斷,直接跳出遞迴,結束進程,輸出不是迴文字串。

程式設計流程圖:

 

程式原始碼:

public class huiwen{private static int len;private static char p[];    public static void main(String args[]){        Scanner sc=new Scanner(System.in);        String str;        str=sc.nextLine();        len=str.length();        p=str.toCharArray();        if(huiwen(0))        System.out.println(str+" is a palindrome!");        else System.out.println(str+" is not a palindrome!");    }    public static boolean huiwen(int n){         if(n>=len/2)         return true;         if(p[n]==p[len-1-n])         return huiwen(n+1);        else return false;      }             } 

 

 

【Java】遞迴遞推的應用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.