您的位置:首页 > 其它

上楼梯问题的解法

2015-08-23 20:52 246 查看
/*

问题:有20级楼梯,每次只能上一级或两级,请问有几种上法。(《少年班》中老师问大法的一个问题,大法通过神奇的心算[Fibonacci数列]得出10946)

本问题的本质及求解斐波那契数列的第n项。常见的计算机算法有递归和线性规划法。当n较大时,用法二更好。

递推公式为:F(n)=F(n-1)+F(n-2),其中F(1)=1,F(2)=2。

2015-8-23 by aweii

*/

#include <stdio.h>

#include <windows.h>

#define N 20

long step(int);

long step1(int);

long step2(int);

void main()

{

long n = step(N);

long n1 = step1(N);

long n2 = step2(N);

printf("%d,%d,%d\n",n,n1,n2);

system("pause");

}

//解法一:递归

long step(int n)

{

if(n==1)

return 1;

else if(n==2)

return 2;

else

return step(n-1)+step(n-2);

}

//解法二:线性规划

long step1(int n)

{

long s[N+1];

s[1]=1;

s[2]=2;

for(int i=3;i<=n;i++)

{

s[i] = s[i-1]+s[i-2];

}

return s
;

}

/*三阶问题:有20级楼梯,每次只能上一级、两级或三级,请问有几种上法?

那么递推公式变为:F(n)=F(n-1)+F(n-2)+F(n-3),其中F(1)=1,F(2)=2,F(3)=4。

线性规划解法:

*/

long step2(int n)

{

long s[N+1];

s[1]=1;

s[2]=2;

s[3]=4;

for(int i=3;i<=n;i++)

{

s[i] = s[i-1]+s[i-2]+s[i-3];

}

return s
;

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