• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 使用C++递归求解跳台阶问题

使用C++递归求解跳台阶问题

作者:Zhang_H 字体:[增加 减小] 来源:互联网 时间:2017-05-28

Zhang_H 通过本文主要向大家介绍了win8c++兼容性问题,c++兼容性问题,c++面试常见问题,八皇后问题c++,约瑟夫问题c++等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

题目:

一个台阶总共有 n 级,如果一次可以跳 1 级,也可以跳 2 级。求总共有多少总跳法?

分析:

也是比较基础的题目,通过递归可以方便的求解。
用Fib(n)表示青蛙跳上n阶台阶的跳法数,青蛙一次性跳上n阶台阶的跳法数1(n阶跳),设定Fib(0) = 1;
       当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;
       当n = 2 时, 有两种跳的方式,一阶跳和二阶跳:Fib(2) = Fib(1) + Fib(0) = 2;
       当n = 3 时,有三种跳的方式,第一次跳出一阶后,后面还有Fib(3-1)中跳法; 第一次跳出二阶后,后面还有Fib(3-2)中跳法;第一次跳出三阶后,后面还有Fib(3-3)中跳法
        Fib(3) = Fib(2) + Fib(1)+Fib(0)=4;
       当n = n 时,共有n种跳的方式,第一次跳出一阶后,后面还有Fib(n-1)中跳法; 第一次跳出二阶后,后面还有Fib(n-2)中跳法..........................第一次跳出n阶后,后面还有 Fib(n-n)中跳法.
       Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+..........+Fib(n-n)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-1)
      又因为Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-2)
      两式相减得:Fib(n)-Fib(n-1)=Fib(n-1)         =====》  Fib(n) = 2*Fib(n-1)     n >= 2
      递归等式如下:

2016215164218510.png (464×172)

代码实现如下(GCC编译通过):

#include "stdio.h"
#include "stdlib.h"
 
int function(int n);
 
int main(void)
{
  int tmp;
   
  tmp = function(5);
  printf("%3d\n",tmp);
 
  return 0;
}
 
int function(int n)
{
  if(n == 1)
    return 1;
  else if(n == 2)
    return 2;
  else  
    return function(n-1) + function(n-2);
}

</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 使用C++递归求解跳台阶问题
  • C和C++混合编程问题

相关文章

  • 2017-05-28简要介绍C++编程中的友元函数和友元类
  • 2017-05-28C++动态分配和撤销内存以及结构体类型作为函数参数
  • 2017-05-28C++中判断成员函数是否重写
  • 2017-05-28解析如何用指针实现整型数据的加法
  • 2017-05-28在C语言中比较两个字符串是否相等的方法
  • 2017-05-28C语言 指针变量作为函数参数详解
  • 2017-05-28C++中CSimpleList的实现与测试实例
  • 2017-05-28C++初始化列表学习
  • 2017-05-28C语言中字符和字符串处理(ANSI字符和Unicode字符)
  • 2017-05-28C++取得当前时间的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言采用文本方式和二进制方式打开文件的区别分析
    • 浅析C++字节对齐容易被忽略的两个问题
    • C++用mysql自带的头文件连接数据库
    • C++ 初始化列表详解及实例代码
    • GCC 编译使用动态链接库和静态链接库的方法
    • 浅谈do {...} while (0) 在宏定义中的作用
    • 探讨C语言中关键字volatile的含义
    • C语言 数据结构堆排序顺序存储(升序)
    • 基于C中一个行压缩图的简单实现代码
    • 深入C语言内存区域分配(进程的各个段)详解

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有