7.22 递归的例子:楼梯算法

n层阶梯的楼梯,每次可以走1~2层阶梯,打印列举所有走法。
            // 比如
            // 走1层的可能走法 (1种)
            // 1
            // 走2层的可能走法(2种)
            // 1 1
            // 2
            // 走3层的可能走法(3种)
            // 1 1 1
            // 1 2
            // 2 1
            // 走4层的可能走法(5种)
            // 1 1 1 1
            // 1 1 2
            // 2 2
            // 2 1 1
            // 1 2 1
            // 走n层的走法   
 
private static void step(int nint[] a
    {
        int sum = 0;
 
        for (int i = 0; i < a.lengthi++) 
        {
            sum += a[i];
        }
        if (sum <= n - 2) 
        {
            for (int i = 1; i <= 2; i++) 
            {
                int x = 0;
                for (int j = 0; j < a.lengthj++) 
                {
                    if (a[j] == 0) 
                    {
                        x = j;
                        break;
                    }
                }
                a[x] = i;
                step(na);
            }
        } 
        else if (sum == n - 1) 
        {
            int x = 0;
            for (int j = 0; j < a.lengthj++) 
            {
                if (a[j] == 0) 
                {
                    x = j;
                    break;
                }
            }
            a[x] = 1;
            step(na);
        } 
        else 
        {
            for (int i = 0; i < a.lengthi++) 
            {
                if (a[i] != 0) 
                {
                    System.out.print(a[i] + " ");
                }
            }
            System.out.println();
        }
        int x = 0;// 每次step方法执行到最后的时候,要擦除这次往a数组中赋的值!
        for (int j = a.length - 1; j >= 0; j--) 
        {
            if (a[j] != 0) 
            {
                x = j;
                break;
            }
        }
        a[x] = 0;
        // 局部变量是数组,step方法根据数组的各位数总和判断是否再继续调用,当执行到最后,局部变量数组
        // 又变成结果输出,step方法顺利执行完,此时将执行上一层的step方法,该结果有要作为局部变量使用
        // 如果不改结果,程序逻辑将会出错!那么想到要在输出结果后把变量的上一次赋值擦除,那么程序能继续
        // 正确运行,然而当上一层的step方法执行完后,又要返回更上一层,此时没有执行到输出结果的那个分支,
        // 那么变量又会出错,所以经分析,应该在每一个step方法的结束处更改变量。测试成功!
    } 
 
posted @ 2017-08-24 13:50  ~~晴天~^.^  阅读(303)  评论(0编辑  收藏  举报