递归的本质就是自己调用自己。
如果 F(N)=F(N-1)*S
- - S为辅助参数
- - 并且F(0)是确定的数值
- - 那么如果知道N
- 必然可以运用递归算出F(N)
比如想要求阶乘,下面这个算法就可以使用:
n的阶乘为:n! = n*(n-1)!其中0!==1
下面用程序来计算5的阶乘:
package method;public class Demo05 {public static void main(String[] args) {System.out.println(math1(5));}public static int math1(int a) {if (a==1) {return 1;}else {return a*math1(a-1);}}
}
练习:制作一个加减乘除的计算器
建议:如果能够使用switch结构,就不要选择if结构。
原因:
if 条件A
else if 条件B
else if 条件C
else 条件Dif elseif程序进行时会把条件ABCD全部跑一遍,没有办法中途break,
除非用while(true)将这一大块整体包裹起来,在while内部才可以使用break,continue等关键字,程序可能混乱,易读性变差。
switch(con)
case con1: break;
case con2: break;
case con3: break;
case con4: break;
default: sth;Switch配合break,那么运行到每个条件内都可以直接结束
加减乘除计算器程序实例:
package method;import java.util.Scanner;public class cal_test {public static void main(String[] args) {double num1=0.0;double num2=0.0;double f_return=0.0;while(true){System.out.println("pls enter num1: ");Scanner x= new Scanner(System.in);if (x.hasNextDouble()){num1 = x.nextDouble();System.out.println("num1= "+num1);}else{System.out.println("not valid double num");break;}System.out.println("pls enter num2: ");if (x.hasNextDouble()){num2 = x.nextDouble();System.out.println("num2= "+num2);}else{System.out.println("not valid double num");break;}System.out.println("pls enter function: ");switch (x.next()) {case "+":f_return = add(num1, num2);break;case "-":f_return = minus(num1, num2);break;case "*":f_return = multiple(num1, num2);break;case "/":f_return = div(num1, num2);break;default:System.out.println("not valid input");}System.out.println(f_return); break;}}public static double add(double a, double b) {return a+b;}public static double minus(double a, double b) {return a-b;}public static double multiple(double a, double b) {return a*b;}public static double div(double a, double b) {return a/b;}}