background image

本来是想写个《C 语言经典题目系列》,本系列包括一些经典算法题目,但由于时间问题,
现在只是收集了不多题目且只做了一部分,就先发上来了。写此目的帮助一些学 c 语言的
人入门及运用一些算法,由于水平有限错误在所难免及本来这些题目不是很难高手就不
用看了,其中错误欢迎大家指正。
1、

【问题描述】梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。编写一个程序,计算共

有多少中不同的走法

【思路】看到此题目容易想到用递归的方法来做,因为递归是一种描述和解决结构自相似

问题的基本算法,而 N 阶楼梯问题和 N-1 阶、N-2 阶的结构完全相同。
     解决递归问题可以分为两个部分,第一部分是一些特殊(基础)情况,用直接法解,
即始基;第二部分与原问题相似,可用类似的方法解决(即递归),但比原问题的规模
要小。
     定义 int count(int n)函数求解 N 阶楼梯的走法,基于上述思想,可知:

N 阶楼梯问题的始基是 N==1、N==2 两种情况;
上楼可以一步上一阶,也可以一步上二阶,当上一阶时问题规模变为 N-1,当上二阶时
问题规模变为 N-2,所以总的情况为 count(n-1)+count(n-2)。
【代码】
cCODE:
 
#include<stdio.h>
#include<stdlib.h>
int count(int n);
/*count how many ways to climb up N steps stairs.*/
int main (int argc, char *argv[])
{
    int n,ct;
    printf("please input n:\n");
    scanf("%d",&n);
    ct=count(n);
    printf("there are %d ways to climb up N steps stairs!\n",ct);
    system("PAUSE");
    return 0;        
}
int count(int n)
{
    if(1==n)
        return 1;
    else if(2==n)
        return 2;
    else return count(n-1)+count(n-2);

【程序输入输出】for example