首页 > 试题广场 >

牛牛学数列5

[编程题]牛牛学数列5
  • 热度指数:22844 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}牛牛开始学习数列啦。现定义斐波那契数列,其前两项为 F_1=1, F_2=1,对于 n\geqq3,有:

\displaystyle F_n = F_{n-1} + F_{n-2}

\hspace{15pt}请计算并输出第 nF_n 的值。

输入描述:
\hspace{15pt}在一行中输入一个整数 n,满足 1 \leqq n \leqq 46


输出描述:
\hspace{15pt}输出一个整数,表示斐波那契数列的第 nF_n
示例1

输入

2

输出

1
示例2

输入

6

输出

8

说明

数列前几项为 1,1,2,3,5,8,因此 F_6=8
看到斐波那契数列,可能你会想到用递归解决,但是如果你不懂如何优化递归,那么用递归效率就太低了,此时你可以参考一下我的循环写法。
#include <stdio.h>

// 计算第 n 项的斐波那契数
int fibonacci_at(int n)
{
    /*
    * f1 : 比喻为指针,一开始指向第一项数
    * f2 : 比喻为指针,一开始指向第二项数
    * result : 由 f1 和 f2 求和而来,即为第三项的数
    * 
    * 如在这样的斐波那契数列中:1, 1, 2, 3, 5, 8 ...
    * f1 和 f2 的指向为:      f1 f2
    */
    int f1 = 1, f2 = 1, result = f1 + f2;

    if (n < 3)
    {
        return 1;
    }

    /*
    * 在这样的斐波那契数列中,只在计算第4项数才开始向右移动 f1 和 f2
    *
    * 计算第3项:1, 1, 2, 3, 5, 8 ...
    *           f1 f2
    * 计算第4项:1, 1, 2, 3, 5, 8 ...
    *              f1 f2
    * 计算第5项:1, 1, 2, 3, 5, 8 ...
    *                 f1 f2
    */
    while (n-- > 3)
    {
        f1 = f2;
        f2 = result;

        result = f1 + f2;
    }

    return result;
}

int main() {
    
    int n = 0;

    scanf("%d", &n);

    printf("%d", fibonacci_at(n));

    return 0;
}


发表于 2025-08-08 20:13:46 回复(1)
n=int(input())
p=1<=n<=46
a,b=1,1
if p:
    for i in range(n-2):a,b=b,a+b
    print(1 if n<3 else b)
else:print('请满足1≦n≦46的正整数要求')

发表于 2025-10-30 10:33:57 回复(0)
n = int(input())
if n == 1 or n == 2:
    print(1)
else:
    a = 1
    b = 1
    for i in range(3, n+ 1):  
        c = a + b
        a = b
        b = c
    print(c)  
发表于 2025-09-23 15:48:34 回复(0)
x=int(input())
a=1
b=1
for i in range(1,x-1):
    if i%2==0:b+=a
    else:a+=b
print(max(a,b))

发表于 2025-09-22 19:24:38 回复(1)
#include <iostream>
using namespace std;

int main() {
    int t;
    cin>>t;
    if (t<3) {
    cout<<1;
    }else {
    int a,b=1,c=1;
    a=b+c;
    for (int n=3; n<t; n++) {//这里因为上面加过了要减一次
    b=c;
    c=a;
    a=b+c;
    }
    cout <<a;
    }
}
// 64 位输出请用 printf("%lld")
发表于 2025-09-16 22:02:22 回复(1)
n = int(input())
F = [1, 1]
while n > len(F):
    F.append(F[len(F)-1]+F[len(F)-2])
print(F[len(F)-1])
发表于 2025-08-13 17:11:01 回复(0)
//----用递归思想解决----
#include <stdio.h>
int fun(int n){
    if(n<3){
        return 1;
    }else {
    return fun(n-1)+fun(n-2);
    }
}
int main() {
    int a;
   scanf("%d",&a);
printf("%d",fun(a));
    return 0;
}


发表于 2026-01-07 12:39:34 回复(0)
a = int(input())
result = []
for i in range(1,a+1):
    if i ==1 :
        result.append(1)
        continue
    if i ==2:
        result.append(1)
        continue
    sum = result[-1] + result[-2]
    result.append(sum)
print(result[-1])
发表于 2025-09-26 22:25:55 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;

    int f[n];
    f[0] = 1;
    f[1] = 1;

    if(n==1 || n==2){
        cout << 1;
    }
    else {
        for(int i = 2;i<=n-1;i++)
        {
            f[i] = f[i-1] + f[i-2];
        }
        cout << f[n-1];
    }
}

发表于 2025-07-14 15:29:23 回复(2)
#递归函数,定义斐波那契函数
def fin(n):
    if n <= 2:
        return 1
    else:
        return fin(n - 1) + fin(n - 2)

n = int(input())
print(fin(n))
发表于 2026-01-09 15:58:51 回复(0)
def num(a):
    if a==1 or a==2:
        return 1
    else:
        return num(a-1) + num (a-2)
a=int(input())
b=num(a)
print(b)
发表于 2026-01-09 00:32:10 回复(0)
#include <stdio.h>
int main()
{
    int n =0,i=0;
    int arr[46]={1,1};
    scanf("%d\n",&n);
    if(n<=2)
    {
        printf("%d",arr[n-1]);
    }
    else if(n>=3)
    {
        for (i=0;i<=n-2;i++)
        {
            arr[i+2]=arr[i+1]+arr[i];
        }
        printf("%d",arr[n-1]);
    }
    return 0;
}

发表于 2026-01-07 14:14:50 回复(0)
#include <stdio.h>
#include <math.h>

int main() {
	int n;
	if (scanf("%d", &n) != 1) {
		return 1;
	}
	if (n < 1 || n > 46) {
		return 1;
	}
	printf("%d", (int)round((pow((1 + sqrt(5)) / 2, n) - pow((1 - sqrt(5)) / 2, n)) / sqrt(5))); //这是通项公式
	return 0;
}

发表于 2026-01-06 18:36:27 回复(0)
#记录输入
input_value = int(input())
if input_value == 1 or input_value == 2 or input_value == 3:
    if input_value == 1:
        print(input_value)
    elif input_value == 2:
        print(1)
    elif input_value == 3:
        print(3)
else:
    #大于2的时候好像有两种方法
#第一种方法是用数列记录每一项的值
#另一个方法是两个循环,记录第i-1项、i-2项
#这次先用第一个方法
    default_list = [1, 1, 2]
    i = 0
    #我下面一行错误的写为了:条件表达式 len(default_list) < input_value,这不是一个可迭代对象,而是一个布尔值(True 或 False)。
    #for len(default_list) < input_value:
    #for的唯一正确用法是for 变量 in 可迭代对象:
    while len(default_list) < input_value:
        c = default_list[-1] + default_list[-2]
        default_list.append(c)
        #下一行是我看有多少次循环的
        #print("程序运行中")
    print(default_list[-1])
发表于 2026-01-03 20:32:33 回复(1)
#include <iostream>
#include <cassert>

int fibonacci_sequence(int n)
{
    if (n == 1 || n == 2)
    {
        return 1;
    }
    else
    {
        return fibonacci_sequence(n - 1) + fibonacci_sequence(n - 2);
    }
}

int main()
{
    int n;
    // std::cout << "请输入一个正整数:";
    std::cin >> n;
    // std::cout << "您输入的正整数是:" << n << "\n";
    assert(n >= 1 && n <= 46);

    std::cout << fibonacci_sequence(n) << "\n";

    return 0;
}

发表于 2025-12-30 17:20:04 回复(0)
n = int(input())
if n<3:
    print('1')
else:
    a=1
    b=1
    for i in range(3,n+1):
        c=a+b
        a=b
        b=c
    print(c)
发表于 2025-12-17 23:45:04 回复(0)
#斐波那契数列
def fib(n):
   if n == 0:
        return [0]
   elif n == 1:
       return [0,1]
   fib1=[0,1]
   for _ in range(2,n):
         fib1.append(fib1[-1]+fib1[-2])
   return fib1

n = int(input())
for x in fib(n+1):
     a = x
print(x)
发表于 2025-12-11 15:53:50 回复(0)
#include <iostream>
using namespace std;

int main() {
  int n;
  cin >> n;
  int a = 1, b = 1;
  int sum = 0;
  if(n == 1 || n == 2){
    cout << "1";
    return 0;
  }
  for(int i = 3; i <= n; ++i){
    sum = a + b;
    a = b;
    b = sum;
  }
  cout << sum ;
}
// 64 位输出请用 printf("%lld")

发表于 2025-12-11 01:04:16 回复(0)
F = [1,1]
n = int(input())
for i in range(2,n):
    F.append(F[i-1]+F[i-2])
   
print(F[-1])
发表于 2025-12-08 16:12:11 回复(0)
#include <stdio.h>

int main()
{
    int n;
    scanf("%d", &n);
    int F1 = 1;
    int F2 = 1;
    int Fn = 0;
    if (n >= 3)
    {
        int x[n-2];
        int y[n-2];
        x[0] = F1;
        y[0] = F2;
        for(int i = 1; i <= (n - 2); i++)
        {
            x[i] = y[i - 1];
            y[i] = x[i] + x[i - 1];
        }
        Fn = x[n - 3] + y[n - 3];
    }
    else if (n < 3)
    {
        Fn = F1;
    }
    printf("%d", Fn);
}
发表于 2025-12-04 10:37:48 回复(0)