首页 > 解决方案 > excel中应用斐波那契数列的visual basic

问题描述

我想编写一个宏,它将从当前单元格中获取整数 N,并在其正下方的单元格中计算斐波那契数列的下一个值。你能告诉我我在哪里犯了错误吗?

Sub Fib()

Dim N, i, f0, f1, sum, Fib, column, row  As Integer

f0 = 0
f1 = 1
N = ActiveCellv.Value
sum = 0
column = ActiveCell.column
row = ActiveCell.row
   
   
If N = 0 Then
    Fib = f0
ElseIf N = 1 Then
    Fib = f1
Else
    For i = 2 To N
        sum = f0 + f1
        f0 = f1
        f1 = sum
    Next i
    Fib = sum
End If
    
For i = row + 1 To N + 1
    Cells(i, column).Value = Fib
Next

End Sub

标签: excelvbafibonacci

解决方案


首先,Dim N, i, f0, f1, sum, Fib, column, row As Integer仅将最后一个变量声明row为整数 - 我的建议是显式声明所有变量并将选项显式放在顶部。

因为N当前被声明为一个对象,当你测试N=0它失败时,因为 N 是值empty

其次For i = row + 1 To N + 1我认为没有意义 - 输出是我认为的单个值

我认为这可以解决它:

Option Explicit
Sub Fib()



Dim N As Integer, sum As Integer, Fib As Integer, column As Integer, row  As Integer

Dim f0 As Integer
Dim f1 As Integer

f0 = 0
f1 = 1
N = ActiveCell.Value
sum = 0
   
   
If N = 0 Then
     Fib = f0
ElseIf N = 1 Then
    Fib = f1
Else
    Dim i As Integer
    For i = 2 To N
        sum = f0 + f1
        f0 = f1
        f1 = sum
    Next i
    Fib = sum
End If
ActiveCell.Offset(1, 0).Value = Fib

End Sub


您可能还想编写为用户定义的函数:

Option Explicit
Function Fib(ByVal N As Long) As Long

  Dim f0 As Long
  Dim f1 As Long
  
  f0 = 0
  f1 = 1
  Fib = 0
     
     
  If N = 0 Then
       Fib = f0
  ElseIf N = 1 Then
      Fib = f1
  Else
      Dim i As Long
      For i = 2 To N
          Fib = f0 + f1
          f0 = f1
          f1 = Fib
      Next i
  End If

End Function

推荐阅读