【项目-爬楼梯】
楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序计算共有多少种不同的走法?
【参考解答(递归法)】
基础:楼梯有一个台阶,只有一种走法(一步登上去);两个台阶,有2种走法(一步上去,或分两次上去);
递推:有n个台阶时,设有count(n)种走法,最后一步走1个台阶,有count(n-1)种走法;最后一步走2个台阶,有count(n-2)种走法。于是count(n)=count(n-1)+count(n-2)。
可见,此问题的数学模型竟然是斐波那契数。
#include<stdio.h>
int main()
{
unsigned long count(int n);
int n;
unsigned long m;
printf("请输入楼梯的阶数:");
scanf("%d",&n);
m=count(n);
printf("有%lu种爬楼梯的方法\n",m);
return 0;
}
unsigned long count (int n)
{
unsigned long f;
if(n==1)
f=1;
else if(n==2)
f=2;
else
f=count(n-1)+count(n-2);
return(f);
}
递归思路清晰,但却“成本”高。另一个方法,在完成问题建模之后,采用了一种很巧妙的“非常规”的做法,将运算量减少了一半。
//计163-1姜淇瀚
#include <stdio.h>
#include <stdlib.h>
int main()
{
int fib(int a,int b,int n);
int n;
scanf("%d",&n);
printf("%d",fib(0,1,n));
return 0;
}
int fib(int a,int b,int n)
{
if(n==3)
{
return a+b;
}
return fib(b,a+b,n-1);
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对软件开发网的支持。如果你想了解更多相关内容请查看下面相关链接
您可能感兴趣的文章:C语言二维数组几种常用的表示方法C语言项目全正整数后再计算的三种参考解答方法C语言程序打豆豆(函数版)剑指offer之C语言不修改数组找出重复的数字C语言测试n的阶乘和x的n次方C语言数组a和&a的区别讲解C语言实现词法分析器C++稀疏矩阵的各种基本运算并实现加法乘法Dijkstra算法最短路径的C++实现与输出路径判断两颗二叉树是否相似的两种方法