vb 编程输出fibonacci数列的前N项
这题主要考察递归函数的思想。代码如下:
#include<stdio.h>
int fbi(int i);//递归函数:输出数列的第i项数据,这里i从0开始计算。
int main()
{
int i,N;
scanf("%d",&N);
for(i=0;i<N;i++)
printf("%d ",fbi(i));
return 0;
}
int fbi(int i)//递归函数:输出数列的第i项数据。这里i从0开始计算。
{
if(i<2)
{
return i;
}
else
{
return fbi(i-1)+fbi(i-2);
}
}
扩展资料
一个函数可以调用其他函数。如果这个函数在内部调用它自己,那么这个函数就叫递归函数。递归函数的作用和循环的方法效果一样,即递归函数本质上是一个方法的循环调用,注意:有可能会出现死循环。因此,使用递归函数时,一定要定义递归的边界(即什么时候退出循环)。
注意:在实际使用中,递归函数由于消耗时间比较长(相比for循环和while循环),所以很少使用。要使递归函数有用,则递归函数必须有一个方法来控制递归调用的次数。
每次函数调用自己时,循环都会重复。现在应该能发现该函数的问题,因为它没有办法停止递归调用。这个函数就像一个无限循环,因为没有代码阻止它重复。
参考资料来源:
Private Sub Form_Load()
Dim I As Integer
Form1.AutoRedraw = True
For I = 1 To 10
Print Fibonacci(I);
Next I
End Sub
Private Function Fibonacci(ByVal N As Integer) As Long
Dim F(32767) As Long
If N = 1 Or N = 2 Then
Fibonacci = 1
Else
Fibonacci = Fibonacci(N - 1) + Fibonacci(N - 2)
End If
End Function
另外也可以用通项公式求得。如图片。
Dim l1 As Long, l2 As Long, l3 As Long, f As Long, n As Integer
l1 = 1: l2 = 1
For n = 1 To 40
If n <= 2 Then
f = 1
Print f
Else
l3 = l1 + l2
l1 = l2
l2 = l3
Print l3
End If
Next n
End Sub
根据之前一版改的,因为当时还没复习到函数和数组,这个程序比较符合当的情境,其实有好几种方法。
Dim I As Integer
Form1.AutoRedraw = True
N=val(inputbox(“请输入N的值”))
For I = 1 To N
Print Fibonacci(I);
Next I
End Sub
Private Function Fibonacci(ByVal N As Integer) As Long
Dim F(32767) As Long
If N = 1 Or N = 2 Then
Fibonacci = 1
Else
Fibonacci = Fibonacci(N - 1) + Fibonacci(N - 2)
End If
End Function
在大神的基础上稍加改进的