递归的现实应用

问设有50个台阶的楼梯, 若一个人上楼梯跨出一步有三种迈法:一次上1个台阶, 一次上2个台阶, 一次上3个台阶。 问总共有多少种不同的上楼方式?

考虑他迈最后一步的情况, 即最后一步上了1个台阶, 也可能上了2个台阶, 也可能上了3个台阶。

Last step=1 -> 前边有(50-1) 个台阶-> 49个台阶有多少种上楼方式

Last step=2 -> 前边有(50-2) 个台阶 -> 48个台阶有多少种上楼方式

Last step=3 -> 前边有(50-3) 个台阶 -> 47个台阶有多少种上楼方式

所以, 50个台阶情况=49个台阶的情况+48个台阶的情况+47个台阶的情况

考虑开始,*--1*2指一次迈2个台阶

1个台阶 -> 1种方式(1*1)

2个台阶 -> 2种方式(1*1+1*1,1*2)

3个台阶 -> 4种(1*3, 1*1+1*2, 1*2+1*1, 1*1+1*1+1*1)

        static int Matrix(int n)
        {
            if (n < 1)
                return 0;
            if (n == 1)
                return 1;
            else if (n == 2)
                return 2;                    
            else if (n == 3)
                return 4;
            else 
                return Matrix(n - 3) + Matrix(n - 2) + Matrix(n - 1);
        }
原文地址:https://www.cnblogs.com/qixue/p/2515423.html