题目:3X4的方格 从左上角A走到右下角B 只能向右向下走 一共有若干种走法?
图形:题目转化为图形以后就是,从(1, 1)方格走到(3, 4)方格有若干种计划(每次走一格)?
剖析:
1、依据题目我们晓得只能往右走或许向下走,那末从(2, 4)格子走到(3, 4)格子只要一种计划,从(3, 3)格子走到(3, 4)格子也只要一种计划。
2、以此类推,到某个格子A的走法 = A上面的格子走法 + A左侧的格子走法;
3、假如遇到第一行或许第一列的格子,那末走法只要一种
4、假如遇到第一个格子,我们以为不需要走,即走法为0
总结:
1、这类把一个庞杂的题目分解成若干个有雷同规律的子题目的要领,我们称之为递归。
2、递归由递归前提和递归出口构成,个中递归出口异常重要。
3、剖析中的第2点我们称之为递归前提。
4、剖析中的点3、4点我们称之为递归出口(返回明白的值)。
代码:
// N X M的方格 从左上角A(1, 1)走到右下角B(N, M) 只能向右向下走 一共有若干种走法?
function calc(x, y){
// 坐标(1, 1) 递归出口
if(x == 1 && y == 1) return 0;
// 坐标(x, 1) (1, y) 递归出口
if(x == 1 || y == 1) return 1;
// 递归前提
if(x > 1 && y > 1) {
return calc(x-1, y) + calc(x, y-1);
}
// 不符合前提,直接返回0
return 0;
}
calc(3, 4); // 10
题目:
依据上面的剖析,我们晓得在递归的过程当中,会有许多反复的格子,异常糟蹋机能,当盘算的数字越大,递归的机能也会越低,怎样进步递归的机能呢?下次我们再引见(剪枝)。