您的位置:首页 > 其它

爬楼梯问题迭代算法解!

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);

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: