爬楼梯问题迭代算法解!
2010-04-09 14:08
856 查看
有一段楼梯有10级台阶,规定每一步只能跨一级或两级或三级,要登上第10级台阶有几种不同的走法?
思路:
0节楼梯: 1 (0)
1节楼梯: 1 (1)
2节楼梯: 2 (11、 2)
3节楼梯: 4 (111、 12、 21、 3)
4节楼梯: 7 (1111、 121、 211、 31、
13、
112、 22 )
7=4+2+1
4=2+1+1
2=1+1+0
1=1+0+0
抽象f(n)=f(n-3)+f(n-2)+f(n-1)
/// <summary>
/// n为阶梯数
/// </summary>
/// <param name="n"></param>
/// <returns>z 为走法数</returns>
static long fib3(int n)
{
long x = 0, y = 0,z=1;
long w, k;
for (int j = 0; j < n; j++)
{
w = z;
k = y;
z = x + y + z;
y = w;
x = k;
}
return z;
}
static void Main(string[] args)
{
for (int i = 1; i <= 10; i++)
{
Console.WriteLine(fib3(i));
}
Console.Read();
}
}
迭代法性能
递归法性能
/// <summary>
/// 递归算法
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
static long dfib1(int n)
{
if (n < 1)
{ return 0; }
if (n == 1)
return 1;
if (n == 2)
return 2;
if (n == 3)
return 4;
return dfib1(n - 1) + dfib1(n - 2) + dfib1(n-3);
}
思路:
0节楼梯: 1 (0)
1节楼梯: 1 (1)
2节楼梯: 2 (11、 2)
3节楼梯: 4 (111、 12、 21、 3)
4节楼梯: 7 (1111、 121、 211、 31、
13、
112、 22 )
7=4+2+1
4=2+1+1
2=1+1+0
1=1+0+0
抽象f(n)=f(n-3)+f(n-2)+f(n-1)
/// <summary>
/// n为阶梯数
/// </summary>
/// <param name="n"></param>
/// <returns>z 为走法数</returns>
static long fib3(int n)
{
long x = 0, y = 0,z=1;
long w, k;
for (int j = 0; j < n; j++)
{
w = z;
k = y;
z = x + y + z;
y = w;
x = k;
}
return z;
}
static void Main(string[] args)
{
for (int i = 1; i <= 10; i++)
{
Console.WriteLine(fib3(i));
}
Console.Read();
}
}
迭代法性能
递归法性能
/// <summary>
/// 递归算法
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
static long dfib1(int n)
{
if (n < 1)
{ return 0; }
if (n == 1)
return 1;
if (n == 2)
return 2;
if (n == 3)
return 4;
return dfib1(n - 1) + dfib1(n - 2) + dfib1(n-3);
}
相关文章推荐
- 爬楼梯问题迭代算法解!
- 递归和迭代算法 [汉诺塔问题]
- 算法第六节:迭代算法“求平方根”问题
- 数据结构与算法——迭代打开url问题(链表)
- 每天一道算法--经典兔子繁殖迭代问题(斐波那契数列)
- 备战考研算法笔记(八)N阶楼梯上楼问题
- 求解组合问题的一个迭代算法
- Python算法:如何解决楼梯台阶问题
- UOJ#9 浅谈在线仙人球嵌套动态网络路径剖分优化的分支定界贪心剪枝启发式迭代加深人工智能搜索决策算法解决问题
- 【面试笔试算法】Problem 1 : DP滑雪问题--网易互联网算法实习生2017笔试题
- Javascript学习(一)——汉诺塔迭代算法的实现过程
- LCA算法,正常迭代实现与tarjan离线实现
- Java算法之最长公共子序列问题(LCS)实例分析
- [梦里原创]关于猫和老鼠的问题(程序算法)
- 算法笔记——【递归】全排列问题
- 算法基础:整数拆分问题(Golang实现)
- 抖动算法处理 RGBA4444 产生的色阶问题
- 算法笔记 //03_众数问题
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 【素养】由一个简单算法想到的程序员素养问题