上机内容:输出Fibnacci序列的第20个数。要求提交两个程序,fib(int n)的实现分别用迭代方法与递归方法实现。
上机目的:递归函数编程
我的程序:
运行结果:
上机目的:递归函数编程
我的程序:
/*
* 程序的版权和版本声明部分:
* Copyright (c) 2013, 青岛农业大学理信学院
* All rights reserved.
* 文件名称:Fibnacci序列.cpp
* 作 者:幻影行者
* 完成日期:2013 年 8 月 5 日
* 版 本 号:v1.0
* 对任务及求解方法的描述部分:
* 问题描述:Fibnacci序列:1、1、2、3、5、8、13、21、……
* 输出Fibnacci序列的第20个数。要求提交两个程序,fib(int n)的实现分别用迭代方法与递归方法实现。
* 问题分析:略
* 算法设计:略
*/
#include<iostream>
using namespace std;
int fib(int); //函数声明,用递归方法实现
int myfib(int); //用迭代方法实现
int main()
{
cout<<"递归方法求fib(20):"<<fib(20)<<endl;
cout<<"迭代方法求fib(20):"<<myfib(20)<<endl;
return 0;
}
//自定义递归函数
int fib(int n)
{
if(n==1)
return 1; //第一项为1
else if(n==2)
return 1; //第二项为1
else
return fib(n-1)+fib(n-2); //第三项以后,调用自身函数,其值为前面两项之和
}
//自定义迭代函数
int myfib(int m)
{
int sum,sum1=0,sum2=1; //迭代的原理跟递归类似,除第一项外,以后每项都是前两项之和,注意此处两个加数初值的设定
for(int i=1;i<=m;++i)
{
if(i==1) //第一项为1
sum=1;
else
{
sum=sum1+sum2; //以后每项都为前两项之和
sum1=sum2; //加完之和把第二个加数作为第一个加数
sum2=sum; //同时把本次所得的值作为第二个加数,进入下一次循环
}
}
return sum;
}
运行结果: