zoukankan      html  css  js  c++  java
  • 关于走楼梯的递归算法

    题目:

    一个共有20个台阶的楼梯,从下面走到上面。一次只能迈一个台阶或两个台阶,并且不能后退,走完这个楼梯共有多少种方法。


    分析:

    1 步台阶只有1种走法(1)

    2步台阶2种(11、2)

    3步台阶有3种(111、12、21)

    4 步台阶有5种(1111、112、121、211、22)

    5 步台阶有8种(11111、1112、1121、1211、122、2111、212、221)

    6步台阶有13种(111111、11112、11121、11211、1122、12111,1212、1221、2111、2112、2121、2211、222)

    可以发现每一个台阶数的走法对应为比它少一步各种走法前加一个1步和比它少两步的走法前加一个2步,并构成一个Fibonacci数列。

    代码如下:
    Private Sub Command1_Click()
    Dim s() As String, num As Long, i As Long
    For i = 1 To 10
    upstairs i, s, num
    Debug.Print Join(s, vbCrLf)
    Debug.Print num & " 种走法"
    Next
    End Sub


    Sub upstairs(ByVal stairnum As Integer, ByRef steps() As String, ByRef methodn As Long)'将stairnum台阶时的所有可能走法以类似“111222 ”格式保存在数组steps()中,走法数目保存在methodn中
    Dim i As Long
    If stairnum = 1 Then
    methodn = 1
    ReDim steps(1 To methodn)
    steps(1) = 1
    End If
    If stairnum = 2 Then
    methodn = 2
    ReDim steps(1 To methodn)
    steps(1) = 11
    steps(2) = 2
    End If
    If stairnum > 2 Then
    Dim a() As String, b() As String, methoda As Long, methodb As Long
    upstairs stairnum - 1, a, methoda ’递归调用

    upstairs stairnum - 2, b, methodb  '递归调用
    ReDim steps(methoda + methodb)
    For i = 1 To methoda
    steps(i) = 1 & a(i)
    Next
    For i = 1 To methodb
    steps(i + methoda) = 2 & b(i)
    Next
    methodn = methoda + methodb
    End If

    End Sub

  • 相关阅读:
    root用户没有权限编辑其他用户处理
    php中 被遗忘的函数
    erlang file操作(IO编程)
    Linux下的MySQL自动备份脚本
    这就是传说中让理科生沉默,让文科生落泪的文理综合体(转)
    LINUX 忘记root密码
    php中 被遗忘的函数
    分页显示的常用操作方法
    php 接口类:interface
    php垃圾回收机制分析
  • 原文地址:https://www.cnblogs.com/fengju/p/6336390.html
Copyright © 2011-2022 走看看