PTA6-2 使用函数求Fibonacci数(C)

本题要求实现求Fabonacci数列项的函数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。

函数接口定义:
int fib( int n );
函数fib应返回第n项Fibonacci数。题目保证输入输出在长整型范围内。

裁判测试程序样例:
#include <stdio.h>

int fib( int n );

int main()
{
int n;

scanf("%d", &n);
printf("%d\n", fib(n));

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例:
7
输出样例:
13

// int fib( int n ){
//     if(n <= 1){
//         return n;
//     }
//     return fib(n-1) + fib(n-2);
// }

 
// 使用迭代计算斐波那契数
int fib(int n) {
    if (n <= 1) {
        return n;
    } else {
        int a = 0, b = 1, c;
        for (int i = 2; i <= n; i++) {
            c = a + b; // 计算下一个数
            a = b; // 更新a为前一个数b的值,为下一次循环做准备
            b = c; // 更新b为当前计算出的数c的值,为下一次循环做准备
        }
        return b; // 返回第n个斐波那契数
    }
}
在C语言中,实现Fibonacci列的计算函数有多种方式,主要包括递归、非递归和组等方法。每种方法都有其特点和适用场景。 ### 递归方法 递归法是最直观的实现方式,但由于存在大量重复计算,效率较低,且对于较大的`n`值可能会导致栈溢出。递归方法的基本思想是根据斐波那契列的定义,直接返回前两项的和。例如: ```c int fibonacci(int n) { if (n == 1 || n == 2) return 1; else return fibonacci(n-1) + fibonacci(n-2); } ``` ### 非递归方法 非递归方法通过循环来计算斐波那契列,避免了递归中的重复计算问题,因此效率更高。例如,可以通过两个变量来保存前两项的值,并逐步计算到第`n`项: ```c int fibonacci(int n) { if (n == 1 || n == 2) return 1; int a = 1, b = 1, c; for (int i = 3; i <= n; i++) { c = a + b; a = b; b = c; } return b; } ``` ### 组方法 组方法通过存储每一项的值来计算斐波那契列,适用于需要多次查询的情况。例如,可以通过一个组来存储前`n`项的值,并根据需要返回第`n`项: ```c int fibonacci(int n) { if (n == 0) return 0; int fib[n+1]; fib[0] = 0; fib[1] = 1; for (int i = 2; i <= n; i++) { fib[i] = fib[i-1] + fib[i-2]; } return fib[n]; } ``` ### 方法比较 - **递归方法**:实现简单,但效率低,适合教学或小规模据计算。 - **非递归方法**:效率高,适合大规模据计算。 - **组方法**:适合需要多次查询的情况,可以避免重复计算[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值