n个2*1小矩形无重叠覆盖2*n大矩形(递归,思路分析及代码实现,斐波那契数列衍生)
2017-07-21 22:29
561 查看
//我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
//思路: 对于n>=3的情况, 不管前面矩形是怎样覆盖的。我们只考虑最后一次怎么覆盖。
//最后一次只有两种覆盖方式:1.用1个小矩形竖着覆盖。 2.用两个小矩形横着覆盖。
//所以总的方法数无外乎 --> 你用各种方法覆盖到只剩1个再竖着覆盖或者你用各种方法覆盖到只剩两个再横着覆盖
//即:总的方法数F(n) = n-1次的方法数F(n-1)(接着用一个小矩形竖着覆盖) + n-2次的方法数F(n-2)(接着用两个小矩形横着覆盖)
int rectCover(int number)
{
if ( number <= 0 )
return 0;
if ( 1 == number )
return 1;
if ( 2 == number )
return 2;
return rectCover( number-1 ) + rectCover( number-2 );
}
//思路: 对于n>=3的情况, 不管前面矩形是怎样覆盖的。我们只考虑最后一次怎么覆盖。
//最后一次只有两种覆盖方式:1.用1个小矩形竖着覆盖。 2.用两个小矩形横着覆盖。
//所以总的方法数无外乎 --> 你用各种方法覆盖到只剩1个再竖着覆盖或者你用各种方法覆盖到只剩两个再横着覆盖
//即:总的方法数F(n) = n-1次的方法数F(n-1)(接着用一个小矩形竖着覆盖) + n-2次的方法数F(n-2)(接着用两个小矩形横着覆盖)
int rectCover(int number)
{
if ( number <= 0 )
return 0;
if ( 1 == number )
return 1;
if ( 2 == number )
return 2;
return rectCover( number-1 ) + rectCover( number-2 );
}
相关文章推荐
- 青蛙跳台阶衍生之变态跳台阶(递归,思路分析及代码实现)
- 汇编语言实现递归阶乘算法代码分析(8)
- 【JS 设计模式 】用组合模式来实现树形导航--代码结构思路分析(一)
- 跳台阶,变态跳台阶,矩形覆盖 代码实现
- 非递归实现二叉树遍历(思路+代码)
- 棋盘覆盖问题算法分析与实现(递归)
- 斐波那契数列和应用举例我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- 用js写“算24”游戏的思路分析与实现代码
- 用两个栈实现队列、旋转数组的最小数、斐波那契数列、青蛙跳台阶、矩形覆盖 --漫漫算法路 刷题篇
- 写出斐波那契数列的递归与迭代代码,并分析时间和空间复杂度。
- java实现我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- 【矩形覆盖问题分析】 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- 递归与循环--斐波那契数列、跳台阶、矩形覆盖
- 剑指offer面试题9——矩形框覆盖(递归改循环,斐波那契数列)
- 通过斐波那契数列分析实现函数时采用递归和循环的利弊
- 矩形覆盖--递归实现
- 用js写“算24”游戏的思路分析与实现代码
- c#斐波那契数列(Fibonacci)(递归,非递归)实现代码
- K-Means 聚类算法原理分析与代码实现
- 详解python使用递归、尾递归、循环三种方式实现斐波那契数列