这是计算机组成的一个任务,原来拿别人的交了,现在补上!

首先,了解 f(n) = f(n-1) + 2*f(n-2) + 3*f(n-3) 的基本条件:f(0) = 0, f(1) = 1, f(2) = 2(也可修改)

我们先从C++实现理解这个式子,新手常犯的错误是用递归去实现,当然这是很简单的错误,不过也是递归不合适用的一个比较经典的情况,此时虽然实现很简单,但是花费的代价是指数级的时间代价,因为我们在调用f(n-1)的时候,和调用f(n-2),f(n-3)时会重复调用很多前面的项,这导致指数级的时间代价,所以用非递归的方法实现比较好:

#include<iostream>
using namespace std;
int time(0);
/*int fibona(int n)
{
    time++;
    if(n==0) return 0;
    if(n==1) return 1;
    if(n==2) return 2;
    else return(fibona(n-1)+2*fibona(n-2)+3*fibona(n-3));
}*/
int fibona(int n) //非递归实现
{
    if(n==0) return 0;
    if(n==1) return 1;
    if(n==2) return 2;
    int tmp[3];
    tmp[0]=0;tmp[1]=1;tmp[2]=2;
    for(int i=2;i<n;i++)
    {
        int t=tmp[2]+2*tmp[1]+3*tmp[0];
        tmp[0]=tmp[1];
        tmp[1]=tmp[2];
        tmp[2]=t;
    }
    return tmp[2];
}

用一个数组即可,当然int t放在外面更好,这里不修改了。

下面一章分析用mips汇编语言实现!