遞歸使用案例:輸出對稱圖形

要求:在控制檯下輸出如下圖形

       1
     121
  12321
1234321


       1
     121
  12321
1234321
  12321
    121
      1


兩個圖形都是對稱的,所以用遞歸很容易實現,下面貼出代碼:

Demotest:

import java.util.Scanner;
public class Demotest{
	public static int i = 1;
	public static void Returnnum(int num,int up )
	{
		if(num == 1)
		{
			System.out.print(up);
			return ;
		}
		else if(num == 0)
		{
			System.out.print(num);
			return ;
		}
		else
		{
			System.out.print(up);
			Returnnum(num - 1,up + 1);
			System.out.print(up);
		}
		return ;
	}
	public static void main(String[] args)
	{
		System.out.print("輸入一個數字2-9之間:");
		
		 int row = new Scanner(System.in).nextInt();
		for (int i = 0; i < row; i++)
		{
			for (int k = 0; k < row-i-1; k++)
			{
				System.out.print(" ");
			}
			Returnnum(i+1,1);
			System.out.println();
		}
	}
}

Demotest3:

import java.util.Scanner;
public class Demotest3{
	public static int i = 1;
	public static void Returnnum(int num,int up )
	{
		if(num == 1)
		{
			System.out.print(up);
			return ;
		}
		else if(num == 0)
		{
			return ;
		}
		else
		{
			System.out.print(up);
			Returnnum(num - 1,up + 1);
			System.out.print(up);
		}
		return ;
	}
	public static void run(int num,int up)
	{
		if(num == 0)
		{
			return ; 
		}else{
			for(int i = 0; i< num;i++)
			{
				System.out.print(" ");
			}
			Returnnum(up,1);
			System.out.println();
			run(num - 1,up + 1);
			for(int i = 0; i< num+1 ;i++)
			{
				System.out.print(" ");
			}
			Returnnum(up-1,1);
			System.out.println();
		}
	}
	public static void main(String[] args)
	{
		System.out.print("輸入一個最大的數(3到9之間)表示菱形:");
		int  num = new Scanner(System.in).nextInt();
		 run(num,1);
	}
}

在Demotest中定義了一個類方法Returnnum(),它的作用是輸出一段迴文數,它的第一個參數是迴文數的最大數值,第二個參數代表是從數值幾開始(一般爲1),例如執行函數Returnnum(5,1),它將會輸出123454321,Returnnum函數的作用僅僅如此。


在Demotest3中,run()函數的作用是輸出菱形,它調用了我們剛剛寫的Returnnum函數,因爲菱形上下部分的結構上對稱的用遞歸加上我們剛剛實現的函數可以輕鬆實現輸出菱形。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章