PTA-斐波那契数列(I)

本文介绍了一种使用递归方法求解斐波那契数列的算法实现,通过C语言代码详细展示了如何计算数列的第n项,适用于初学者理解和实践递归算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                            斐波那契数列(I)

 

已知斐波那契数列 F​n​​=F​n−1​​+F​n−2​​(n>=3),F​1​​=1,F​2​​=1 用递归的方法求解该数列的第n项。

输入格式:

输入一个正整数n (1<=n<=40)。

输出格式:

输出一个数,数列的第n项

输入样例1:

1

输出样例1:

1

输入样例2:

3

输出样例2:

2

 

解答:

#include<stdio.h>
int fibonacci(int n)
{
    if(n==1 || n == 2) return 1;
    else return fibonacci(n-1) + fibonacci(n-2);
}

int main()
{
    int n;
    scanf("%d", &n);
    printf("%d\n", fibonacci(n));
    return 0;
}

 

### 使用C语言编写斐波那契数列程序 为了实现斐波那契数列,在C语言中有多种方法可以完成这一任务。下面展示一种基于迭代的方式,这种方式相较于简单的递归效率更高。 #### 方法一:通过循环计算斐波那契数列并打印特定项 ```c #include <stdio.h> int fibonacci(int n) { if (n == 0) return 0; else if (n == 1) return 1; int a = 0, b = 1, c; for (int i = 2; i <= n; ++i) { c = a + b; a = b; b = c; } return b; } int main() { int n; scanf("%d", &n); printf("Fibonacci(%d) = %d\n", n, fibonacci(n)); return 0; } ``` 此代码段实现了给定索引`n`处的斐波那契数值的获取[^1]。对于较大的`n`值来说,这种方法比直接采用递归来得更高效,因为它避免了大量的重复计算。 #### 方法二:计算斐波那契数列前N项之和 如果目标是求解斐波那契数列中前若干项的总和,则可按照如下方式进行: ```c #include <stdio.h> int main() { int n, sum = 0, t1 = 0, t2 = 1, nextTerm = 0; printf("Enter the number of terms: "); scanf("%d", &n); for (int i = 1; i <= n; ++i) { // 打印每一项 printf("%d ", t1); sum += t1; // 计算下一项 nextTerm = t1 + t2; t1 = t2; t2 = nextTerm; } printf("\nThe sum is %d.\n", sum); return 0; } ``` 上述代码不仅能够输出斐波那契序列中的每一个成员直到第`n`个位置,而且还会累加这些数字得到它们的总和[^2]。 #### 方法三:找出指定范围内的所有斐波那契数 当需要找到位于两个整数之间的所有斐波那契数时,可以通过不断生成新的斐波那契数并与边界比较来达成目的: ```c void PrintFN(int m, int n) { int i = 1; int flag = 1; // 控制是否为首项输出标志位 int count = 0; // 统计符合条件的数量 while (fib(i) < m) { i++; } while (fib(i) <= n) { if (flag) { printf("%d", fib(i)); flag = 0; } else { printf(" %d", fib(i)); } count++; i++; } if (!count) { printf("No Fibonacci number"); } } ``` 这里假设已经定义了一个名为`fib()`的辅助函数用于返回对应序号下的斐波那契数值[^4]。这段逻辑会遍历可能存在的斐波那契数直至超出上限为止,并适当调整输出格式以满足题目要求。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏雪无痕是个小疯子

您的鼓励将促使我的创作更有价值

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值