当前位置: 首页 > news >正文

[one_demo_7]求走到第50个台阶的走法多少种

 

一个楼梯有50个台阶,一次只能走一个台阶或两个台阶,问,从第一台阶走到第50台阶,有多少种走法。

分析

走第1阶,1种走法;

走第2阶,2种走法;

走第3阶,3种走法,因为每次只能走1阶或2阶,所以,走到第3阶最近的阶,只能是从第1阶走来,或从第2阶走来,那么,走到第3阶的走法就是走到第1阶和走到第2阶的走法的和;

走第4阶,5种走法,因为每次只能走1阶或2阶,所以,走到第4阶最近的阶,只能是从第2阶走来,或从第3阶走来,那么,走到第4阶的走法就是走到第2阶和走到第3阶的走法的和;

走第48阶,因为每次只能走1阶或2阶,所以,走到第48阶最近的阶,只能是从第46阶走来,或从第47阶走来,那么,走到第48阶的走法就是走到第46阶和走到第47阶的走法的和;

走第49阶,因为每次只能走1阶或2阶,所以,走到第49阶最近的阶,只能是从第47阶走来,或从第48阶走来,那么,走到第49阶的走法就是走到第47阶和走到第48阶的走法的和;

走第50阶,因为每次只能走1阶或2阶,所以,走到第50阶最近的阶,只能是从第48阶走来,或从第49阶走来,那么,走到第50阶的走法就是走到第48阶和走到第49阶的走法的和;

经过分析,这个问题实际上是类斐波那契数列的问题。即从第3项开始,每项都为其前两项之和。这个问题,可以使用递归,循环或数组解决。

//递归解决

double taijie(int n)

{

         if (n == 1)

         {

                   return 1;

         }

         else if (n == 2)

         {

                   return 2;

         }

         else

         {

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

         }

}

//使用循环解决

float taijiexunhuan(intnum)

{

         int n1 = 1;

         int n2 = 2;

         double res = 0.0;

         for (int i = 2; i < num; i++)

         {

                   res = n1 + n2;

                   n1 = n2;

                   n2 = res;

         }

         return res;

}

//使用数组解决

float taijieshuzu(intn)

{

         float a[50];

         a[0] = 1.0;

         a[1] = 2.0;

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

         {

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

         }

         return a[n - 1];

}

void main()

{

         printf("%lf", taijie(4));

         printf("\n%lf",taijiexunhuan(4));

         printf("\n%lf",taijieshuzu(4));

         getchar();

}

如果这个问题被扩展了,一次可以走1阶,2阶,3阶,推理的原理是类似的,结果就是从第4阶开始,每阶走法都为前三阶走法之和。变成每次走更多阶也类似。

 

相关文章:

  • [one_demo_8]十进制转二进制
  • [one_demo_9]判断数组是否递增
  • [one_demo_10]递归解决汉诺塔问题
  • [one_demo_11]二分查找法
  • [one_demo_12]递归打印*\n*.*.\n*..*..\n图形
  • c
  • network
  • 使用javadoc生成项目的帮助文档
  • [one_demo_13]ArrayList去除重复的元素
  • web项目发布到tomcat的两种方式
  • androidBasic
  • mybatis使用like模糊查询防sql注入写法
  • maven整合ssm项目中报org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
  • dubbo简介
  • FastDFS简介
  • [PHP内核探索]PHP中的哈希表
  • @jsonView过滤属性
  • 「译」Node.js Streams 基础
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 2017 年终总结 —— 在路上
  • Angular 响应式表单 基础例子
  • Angular数据绑定机制
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • css的样式优先级
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript对象详解
  • mysql外键的使用
  • PhantomJS 安装
  • Promise面试题,控制异步流程
  • Python 基础起步 (十) 什么叫函数?
  • Twitter赢在开放,三年创造奇迹
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于springcloud Gateway中的限流
  • 利用jquery编写加法运算验证码
  • 聊聊flink的BlobWriter
  • 巧用 TypeScript (一)
  • 入门级的git使用指北
  • 学习HTTP相关知识笔记
  • 智能合约开发环境搭建及Hello World合约
  • 阿里云服务器购买完整流程
  • #FPGA(基础知识)
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (pojstep1.3.1)1017(构造法模拟)
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (四)Linux Shell编程——输入输出重定向
  • (学习日记)2024.01.09
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复