C++版本 17:菲波那契數列

Sky-木落發表於2020-10-29

17:菲波那契數列

總時間限制: 1000ms 記憶體限制: 65536kB

描述

菲波那契數列是指這樣的數列: 數列的第一個和第二個數都為1,接下來每個數都等於前面2個數之和。給出一個正整數k,要求菲波那契數列中第k個數是多少。

輸入

輸入一行,包含一個正整數k。(1 <= k <= 46)

輸出

輸出一行,包含一個正整數,表示菲波那契數列中第k個數的大小

樣例輸入

19

樣例輸出

4181

解法一:遞迴解法(時間複雜度高)

#include<bits/stdc++.h>
using namespace std;
int func(int n){
	if(n == 1 || n == 2){
		return 1;
	} 
	return func(n - 1) + func(n - 2);
} 
int main()
{
	int n;
	cin >> n;
	cout << func(n);
	
}

解法二:非遞迴解法

#include<bits/stdc++.h>
using namespace std;
int func(int n){
	if(n == 1 || n == 2){
		return 1;
	} 
	int n1 = 1, n2 = 1, sum = 0;
	for(int i = 3; i <= n; i++){
		sum = n1 + n2;//2
		n1 = n2;
		n2 = sum;
	
	} 
	return sum;
} 
int main()
{
	int n;
	cin >> n;
	cout << func(n);
	
}

相關文章