对于输入同样的非负整数n,用迭代、递归、显示公式 及矩阵4种方法计算第n个Fibonacci数,并比较上述4种 方法基本操作的执行次数; 2)设计可供用户选择算法的交互式菜单(放在相应的 主菜单下)。 python编写
时间: 2024-06-03 20:11:16 浏览: 97
CSDN开发的ChitGPT可以回答您的问题。下面是Python代码实现这个问题:
# Fibonacci迭代方法
def fibonacci_iterative(n):
a, b = 0, 1
for i in range(n):
a, b = b, a + b
return a
# Fibonacci递归方法
def fibonacci_recursive(n):
if n <= 1:
return n
else:
return fibonacci_recursive(n-1) + fibonacci_recursive(n-2)
# Fibonacci显示公式方法
from math import sqrt
def fibonacci_formula(n):
return int((1/sqrt(5))*(((1+sqrt(5))/2)**n - ((1-sqrt(5))/2)**n))
# Fibonacci矩阵方法
import numpy as np
def fibonacci_matrix(n):
q = np.matrix([[1, 1], [1, 0]], dtype=object)
res = np.matrix([[1, 0]], dtype=object)
pow = q ** (n - 1)
res = res * pow
return int(res[0, 0])
# 计算执行次数
import time
def get_execution_count(method, n):
start_time = time.perf_counter()
method(n)
end_time = time.perf_counter()
execution_count = end_time - start_time
return execution_count
# 测试
n = 10
iterative_time = get_execution_count(fibonacci_iterative, n)
recursive_time = get_execution_count(fibonacci_recursive, n)
formula_time = get_execution_count(fibonacci_formula, n)
matrix_time = get_execution_count(fibonacci_matrix, n)
print(f"迭代方法: {iterative_time:.6f}")
print(f"递归方法: {recursive_time:.6f}")
print(f"显示公式方法: {formula_time:.6f}")
print(f"矩阵方法: {matrix_time:.6f}")
# 用户选择交互式菜单
print("请选择计算Fibonacci数的方法:")
print("1. 迭代方法")
print("2. 递归方法")
print("3. 显示公式方法")
print("4. 矩阵方法")
option = int(input("输入数字选择对应的方法:"))
num = int(input("请输入要计算的Fibonacci数的序列号:"))
if option==1:
result = fibonacci_iterative(num)
elif option==2:
result = fibonacci_recursive(num)
elif option==3:
result = fibonacci_formula(num)
elif option==4:
result = fibonacci_matrix(num)
else:
print("请选择正确的选项")
print(f"Fibonacci数列第{num}个数是{result}")
阅读全文