excel - 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
解决方案
首先,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
推荐阅读
- javascript - 内容安全策略 nonce 不适用于事件处理程序属性
- swift - Iterate over functions in Swift
- mongodb - Talking to container on Kubernetes (GKE) from other container
- python - 未提供超级用户权限时如何更改默认 python 版本
- sql - 如何获得最大序列号?
- ssis - 如何将二进制数据转换为文本,然后再返回
- matlab - 带有类方法的gpu上的matlab arrayfun
- ios - 以编程方式创建部分屏幕 UIPageViewController
- typescript - 如何为接口创建索引签名
- android - Android Studio 数据包解析问题 .apk