算法基础:从斐波那契数列的计算理解动态规划数组的作用

本文通过斐波那契数列的递归实现,探讨了递归效率问题,并引入动态规划的dp数组进行优化,详细分析了优化前后的执行效率和重复计算情况,展示了动态规划在解决此类问题中的优势。
摘要由CSDN通过智能技术生成

这篇文章以Fibonacci数列计算的递归实现使用动态规划法的优化为例,对动态规划方式所能起到的作用进行说明。


斐波那契数列

斐波那契数列:
f(n) = f(n-1) + f(n-2) (n>1)
f(0) = 1
f(1) = 1

简洁的递归实现

斐波那契的实现非常简单,尤其是使用递归来写,这几乎是递归理解时的一个入门算法,实现示例可能会如下所示:

int fibonacci(int n) {
    if(n == 0 || n == 1) return 1;
    return fibonacci(n-1) + fibonacci(n-2);
}

这样写实际上是有很多限制的,首先它执行不了多少次,n为46的时候就会int型溢出了,但是这并不是这篇文章要纠结的地方,在后面将会重点分析一下其执行效率。


递归执行效率分析

使用clock函数来计算一下n为45的时候所需要的时间,整体示例代码如下所示:

#include <stdio.h>
#include <time.h>

int fibonacci(int n) {
   
    if(n == 0 || n == 1) return 1;
    return fibonacci(n-1) + fibonacci(n-2);
}

int main() {
   
    int n = 0;
    while(~scanf("%d",&n)) {
   
        time_t start_time=0, end_time=0;
        start_time=clock();
        printf("fibonacci(%d)=%d\n",n,fibonacci(n));
        end_time=clock();
        printf("Time Used: %f\n",(double)(end_time-start_time)/CLOCKS_PER_SEC)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值