• 枚举
import java.util.Scanner;
    public class Main {
        public static void main(String[] args) {
            int cnt = 0;
            Scanner sc = new Scanner (System.in);
            int n = sc.nextInt();
            for(int i = 0 ; i < 1 << n ; i++) {
                boolean flag = true;
                for(int j = 1 ; j < n ; j++) {
                    if(get(i,j)==1&&get(i,j-1)==1) {
                        flag = false;
                        break;
                    }
                }
                if(flag) {
                    cnt +=1;
                }
            }
            System.out.println(cnt);
        }
        private static int get(int i, int j) {//判断i的j位是否为1 
            return i >>j&1;
        }
    }
  • 递推解法:
    开一个二维数组 选0 /1
    初始值arr(0,0) 没有限制下一位 我们下一位写0 /1 都行 所以我们把第0位写成 “0 ” 为 1
    如果第0位(不是有效位)看成1限制有效位第一位 不能填1
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new  Scanner (System.in);
        int num = sc.nextInt();
        int arr[][]  = new int[num+1][2];
        arr[0][0] =1;//为后面作铺垫 方便后面的代码处理
        for(int i = 1 ; i <= num ;i++) {
            arr[i][0] = arr[i-1][0] + arr[i-1][1];
            arr[i][1] = arr[i-1][0];
        }
        System.out.println(arr[num][1]+ arr[num][0]);
    }
}