Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4824482
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: C/C++

2009-06-30 13:21:07

【问题描述】梯有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)。 

#include <stdio.h>
#include <stdlib.h>

int count(int N)
{
  if(N == 1)
    return 1;
  else if(N ==2)
    return 2;
  else
    return count(N-1)+count(N-2);
 }
int main(int argc, char *argv[])
{
  int i;
  printf("Please input the num:\n");
  scanf("%d",&i);
  printf("louti %d methods: %d\n",i,count(i));
  system("PAUSE");    
  return 0;
}

阅读(1764) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

ubuntuer2009-07-05 17:48:41

int count(int N) { if(N == 1) return 1; else if(N ==2) return 2; else { int xx = 1; int yy = 2; int zz = 0; int i = 3; for(;i<=N;i++) { zz = xx+yy; xx = yy; yy = zz; } return zz; } } ???

mfzz11342009-07-05 14:40:32

这个问题还用递归,脑子进水了吧! 直接用矩阵,有一个logn的算法,这玩艺不就是一个Fabnacci数列吗?