这里可以直接使用递归来实现该需求:
需求:
输入第n个数字,就依此规律输出对应的值
1、首先要确保输出的是整数,这里方法有很多,可以用正则,也可以用sc.next()
等 在这里我使用的是hasNextInt();
代码如下:
import java.util.Scanner; /** * 使用递归实现1,1,2,3,5,8..... * @ClassName: Math2 * @Description: TODO * @author: 安生 优秀的判断力来自经验,但经验来自于错误的判断。 * @date: 2019年12月17日 下午7:11:52 */ public class Math2 { static Scanner sc = new Scanner(System.in); //确保输入的是整数: public static int getInt() { System.out.println("请输入整数:"); while(!sc.hasNextInt()) { System.out.println("输入的不是整数,请重新输入:"); sc.next(); } int num = sc.nextInt(); return num; } public static void main(String[] args) { System.out.println(getInt()); } }
效果如下:
2、递归的第一种方法:
//这里使用long 类型 因为int类型可能会出现脏数据 public static long test(int n) { if(n==0) { System.out.println("结束输出"); return 0; } if(n==1 || n==2) { return 1; } return test(n-2)+test(n-1); } //1,1,2,3,5,8,13,21 public static void main(String[] args) { long result = 0; do { result = test(getInt()); System.out.println(result); }while(result!=0); }
测试第一种方法的结果如下:
第二种递归方法:
public static long test2(int n) { long a = 1; long b = 1; if(n==0) { System.out.println("输出结束!"); return 0; }else if(n==1 || n==2) { return 1; }else { for(int i = 0; i<n-2; i++) { long tem = 0; tem = a; a += b; b = tem; } return a; } } //1,1,2,3,5,8,13,21 public static void main(String[] args) { long result = 0; do { result = test2(getInt()); System.out.println(result); }while(result!=0); }
测试结果: