for(表達式1;表達式2;表達式3) { 若干語句 }
while(表達式) { 若干語句 }
do{ 若干語句 }while(表達式);
遞歸html
遞歸算法是一種直接或間接地調用自身的算法。在編寫程序時,遞歸算法對解決一大類問題是十分有效的,它每每使算法的描述簡潔並且易於理解。遞歸用於解決形式相同,規模不一樣的問題,能用遞歸解決的問題均可以轉化爲循環。遞歸把一個大型複雜的問題層層轉化爲一個與原問題類似的規模較小的問題來求解,遞歸策略只需少許的程序就可描述出解題過程所須要的屢次重複計算,大大地減小了程序的代碼量。遞歸的能力在於用有限的語句來定義對象的無限集合。用遞歸思想寫出的程序每每十分簡潔易懂。遞歸程序有兩個要點:遞歸公式和結束條件。咱們以求整數的階乘爲例:
java
使用JDB調試java程序算法
- 在Linux Bash中輸入 vim 類名。java編輯調試代碼
- 使用javac -g -d bin src/類名.java對程序進行編譯(注意javac中-g參數是爲了產生各類調試信息,必定要加上,不然沒法調試)
- 使用jdb -classpath .:./bin 類名對程序進行調試
- 開始調試:經過運行stop in 類名.main命令在main方法開始處設置斷點
- 輸入run命令來運行類名.class,程序會在main()的開始處停下
- 能夠用locals命令查看變量,用step命令運行下一行代碼
- 可使用list來查看運行到了源代碼的什麼位置
- 可使用print或eval命令來查看變量的值
- 能夠經過stop at HelloJDB:12在第12行設個斷點,而後運行cont就會一會兒把循環運行完並停在第十二行
- 使用quit或exit能夠退出JDB
循環與遞歸編程
參考2016-2017-2 《Java 程序設計》課堂實踐項目編程實現1!+2!+3!+... + N!的功能。N由命令行傳入,好比類名爲SumofRecur, java SumofRecur 8 給出1!+2!+3!+... + 8!的值,提交運行結果的截圖(至少五張),注意測試正常,異常,邊界狀況, 好比java SumofRecur -8,java SumofRecur 0,java SumofRecur 你的學號後四位。vim
代碼以下:數組
public class CLSumRecursion { public static void main(String args[]) { int sum = 0; if(args.length < 1) { System.out.println("Usage:java CLSumRecursion num1 num2 ..."); System.exit(0); } int tmp[] = new int[args.length]; for(int i=0;i<args.length;i++) { tmp[i] = Integer.parseInt(args[i]); } if(tmp[0]<=0) { System.out.println("Please check your input!"); System.exit(0); } else { for(int j=1;j<=tmp[0];j++) { sum += fact(j); } } if(sum<=0) { System.out.println("Please check your input!"); System.exit(0); } else System.out.println(sum); } public static int fact(int n) { if(n == 0) return 1; else return n*fact(n-1); } }
運行結果截圖:
測試
public class xiti2_1 { public static void main(String args[]) { char a = '你'; char b = '我'; char c = '他'; System.out.println("漢字:"+a+"的位置:"+(int)a); System.out.println("漢字:"+b+"的位置:"+(int)b); System.out.println("漢字:"+c+"的位置:"+(int)c); } }
public class xiti2_2{ public static void main(String[] args) { for (int j = 913; j < 930; j++) { //j表明每一個字母的ASCII代碼 System.out.print((char)j+" "); //將ASCII代碼轉換成字符就是每一個字母了 } for (int j = 932; j < 938; j++) { //中間空了一個 System.out.print((char)j+" "); } for (int j = 945; j < 970; j++) { //大小寫中間空了好幾個,都跳過了 System.out.print((char)j+" "); } } }
public class xiti3_1 { public static void main(String args[]) { int sum = 0; int n = 10; for(int i = 1;i<=n;i++) { sum = sum+fact(i); } System.out.println(sum); } public static int fact(int i) { if(i == 0) return 1; else return i*fact(i-1); } }
public class xiti3_2 { public static void main(String args[]) { int i,j; for(i=2;i<=100;i++) { for(j=2;j<=i/2;j++) { if(i%j==0) break; } if(j>i/2) System.out.println(" "+i+"是素數"); } } }
public class xiti3_3_1 { public static void main(String args[]) { double sum = 0; for(int i=1;i<=20;i++) { sum = sum+1.0/fact(i); } System.out.println(sum); } public static int fact(int n) { if(n==0) return 1; else return n*fact(n-1); } }
public class xiti3_3_2 { public static void main(String args[]) { double sum = 0; int i = 1; do { sum=sum+1.0/fact(i); i++; }while(i<=20); System.out.println(sum); } public static int fact(int n) { if(n==0) return 1; else return n*fact(n-1); } }
public class xiti3_4 { public static void main(String args[]) { int i; for(i=1;i<=1000;i++) { if(wanshu(i)==1) System.out.println(i+"是完數"); else continue; } } public static int wanshu(int i) { int sum = 0; for(int j=1;j<i;j++) { if(i%j==0) sum=sum+j; } if(sum==i) return 1; else return 0; } }
public class xiti3_5 { public static void main(String args[]) { long i=1,sum=0,a=8,item=a; for(i=1;i<=10;i++) { sum=sum+item; item=item*10+a; } System.out.println(sum); } }
public class xiti3_6 { public static void main(String args[]) { int sum = 0; int i = 1; while(sum<8888){ sum=sum+i; i++; } System.out.println(i-1); } }