題組內容
二、遞迴函式(Recursion)是程式語言常用的解題技巧之一,請回答下列問題:
(二)請用迴圈(Iteration)以及遞迴分別撰寫計算第 n 個費式數列的值。費氏數列由 0 和 1 開始,之後費氏數列的值就是由之前的兩數相加而得出。程式語言可使用 C/C++、Python 或是 Java 撰寫。 (10 分)
詳解 (共 1 筆)
詳解
PYTHON:
# 使用迴圈計算第 n 個費氏數列的值
def fibonacci_iterative(n):
if n <= 0:
return 0
elif n == 1:
return 1
a, b = 0, 1
for _ in range(2, n + 1):
a, b = b, a + b
return b
if n <= 0:
return 0
elif n == 1:
return 1
a, b = 0, 1
for _ in range(2, n + 1):
a, b = b, a + b
return b
# 測試迴圈版本
n = 10
print(f"Fibonacci Iterative (n={n}):", fibonacci_iterative(n))
n = 10
print(f"Fibonacci Iterative (n={n}):", fibonacci_iterative(n))
# 使用遞迴計算第 n 個費氏數列的值
def fibonacci_recursive(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)
# 測試遞迴版本
print(f"Fibonacci Recursive (n={n}):", fibonacci_recursive(n))
print(f"Fibonacci Recursive (n={n}):", fibonacci_recursive(n))
C++
// 使用迴圈計算第 n 個費氏數列的值(C++ 版本)
#include <iostream>
using namespace std;
using namespace std;
int fibonacci_iterative(int n) {
if (n <= 0) {
return 0;
} else if (n == 1) {
return 1;
}
int a = 0, b = 1;
for (int i = 2; i <= n; ++i) {
int temp = b;
b = a + b;
a = temp;
}
return b;
}
if (n <= 0) {
return 0;
} else if (n == 1) {
return 1;
}
int a = 0, b = 1;
for (int i = 2; i <= n; ++i) {
int temp = b;
b = a + b;
a = temp;
}
return b;
}
// 使用遞迴計算第 n 個費氏數列的值(C++ 版本)
int fibonacci_recursive(int n) {
if (n <= 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2);
}
}
if (n <= 0) {
return 0;
} else if (n == 1) {
return 1;
} else {
return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2);
}
}
int main() {
int n = 10;
cout << "Fibonacci Iterative (n=" << n << "): " << fibonacci_iterative(n) << endl;
cout << "Fibonacci Recursive (n=" << n << "): " << fibonacci_recursive(n) << endl;
return 0;
}
int n = 10;
cout << "Fibonacci Iterative (n=" << n << "): " << fibonacci_iterative(n) << endl;
cout << "Fibonacci Recursive (n=" << n << "): " << fibonacci_recursive(n) << endl;
return 0;
}