fibonacci数列 Fibonacci数列递归法和迭代法的模块化测试

Fibonacci数列递归法和迭代法的模块化测试――简介

本文介绍Fibonacci数列用递归法和迭代法区别,重点在于本文把递归法进行了优化,用二叉树,三叉树,尾归法分别来设计递归算法并和迭代法进行比较,而且这个代码把这些功能做了模块化,方便使用。(c语言,vs2013编译器)(文章后会附代码)

二叉树递归算法函数名Fib_rec1.

三叉树递归算法函数名Fib_rec2.

尾归法递归算法函数名Fib_rec3.

递迭代法算法函数名Fib_ite.

Fibonacci数列递归法和迭代法的模块化测试――工具/原料
vs或者vc++Fibonacci数列递归法和迭代法的模块化测试――方法/步骤

Fibonacci数列递归法和迭代法的模块化测试 1、

程序主界面,

模块一为二叉树递归算法和迭代法比较

模块二为三叉树递归算法和迭代法比较

模块三为尾归法递归算法和迭代法比较

数字4退出


Fibonacci数列递归法和迭代法的模块化测试 2、

主界面错误输入测试


Fibonacci数列递归法和迭代法的模块化测试 3、

次级模块界面,输入fiboncci位数开始测试


Fibonacci数列递归法和迭代法的模块化测试 4、

定义了越界值,非法输入时报错

Fibonacci数列递归法和迭代法的模块化测试_递归法


Fibonacci数列递归法和迭代法的模块化测试 5、

程序可在次级界面选择继续输入数字测试,或者返回主界面,或者退出


Fibonacci数列递归法和迭代法的模块化测试 6、

代码如下

#include<stdio.h> //预处理头文件

#include<time.h>

#include<stdlib.h>

//函数声明,后面介绍函数功能

void InitMenu();

void Select();

void SubSelect(char a);

long Fib_ite(int n);

long Fib_rec1(int n);

long Fib_rec2(int n);

long Fib_rec3(int a, int b, int n);

void Fib1();

void Fib2();

void Fib3();

int Transfrom(char a[]);

//主函数

int main()

{

InitMenu();

return 0;

}

//初始化主界面函数

void InitMenu()

{

printf("**************************************************************n");

printf("** 欢迎进入Fibonacci测试系统主界面,你可以做以下事情: **n");

printf("** 1 选择此选项可以进行对Fibonacci中递归算法优化一进行选择 **n");

printf("** 2 选择此选项可以进行对Fibonacci中递归算法优化二进行选择 **n");

printf("** 3 选择此选项可以进行对Fibonacci中递归算法优化三进行选择 **n");

printf("** 4 选择此选项可以退出 **n");

printf("**************************************************************n");

Select();

}

//主界面选择函数

void Select()

{

int n;

scanf_s("%d", &n); //数字录入

if (n<1 || n>4) //判断字符正确性

{

fflush(stdin); //对输入字母时产生的buffer越界进行清理,在输入错误时进行

printf("不可以输入其他字符,请继续选择!!!n"); //输出错误信息

InitMenu(); //输入错误时,继续返回初始化函数输入

}

switch (n) //对录入数字进行选择

{

case 1:system("cls"); //先清屏函数,再选择1,进入递归优化一方案

printf("******************************n");

printf("*欢迎进入Fibonacci优化一模块 *n");

printf("******************************n");

printf("请输入要测试数字n");

Fib1();

break;

case 2:system("cls"); //选择2,进入递归优化二方案

printf("******************************n");

printf("*欢迎进入Fibonacci优化二模块 *n");

printf("******************************n");

printf("请输入要测试数字n");

Fib2();

break;

case 3: //选择3,进入递归优化三方案

system("cls");

printf("******************************n");

printf("*欢迎进入Fibonacci优化三模块 *n");

printf("******************************n");

printf("请输入要测试数字n");

Fib3();

break;

case 4:

exit(0); //选择4,退出。

break;

default:

printf("输入有误,请重新输入!!!!n"); //当输入出错时,输出错误信息

Select(); //选择出错时,重新选择

break;

}

}

void Fib1() // 优化一函数

{

int m;

clock_t us1, us2;

char a[5];

scanf_s("%d", &m); //输入数字,进行计算

getchar(); //接收scanf留下的回车

if (m > 45)

{

printf("对不起,值已经越界,请重新输入,不要大于45!!!!n");

Fib1();

}

new1: us1 = clock();

printf("递归优化一函数计算结果:%ldn", Fib_rec1(m));

us2 = clock();

printf("递归优化一函数执行时间%ld毫秒n", us2 - us1);

us1 = clock();

printf("非递归函数计算结果:%ldn", Fib_ite(m));

us2 = clock();

printf("非递归函数执行时间%ld毫秒n", us2 - us1);

printf("************************************n");

printf("* 请选择以下项目: *n");

printf("* a 返回主界面 *n");

printf("* b 退出程序 *n");

printf("* 或者继续键入数字进行计算 *n");

printf("************************************n");

gets_s(a); //继续接收字符串

m = Transfrom(a); //把处理字符函数处理字符的结果给

goto new1; //跳转到排位置

}

void Fib2() //类似优化一

{

int m;

clock_t us1, us2;

char a[5];

scanf_s("%d", &m);

getchar();

{

printf("对不起,值已经越界,请重新输入,不要大于45!!!!n");

Fib2();

}

new2: us1 = clock();

printf("递归优化二函数计算结果:%ldn", Fib_rec2(m));

us2 = clock();

printf("递归优化二函数执行时间%ld毫秒n", us2 - us1);

us1 = clock();

printf("非递归函数计算结果:%ldn", Fib_ite(m));

us2 = clock();

printf("非递归函数执行时间%ld毫秒n", us2 - us1);

printf("************************************n");

printf("* 请选择以下项目: *n");

printf("* a 返回主界面 *n");

printf("* b 退出程序 *n");

printf("* 或者继续键入数字进行计算 *n");

printf("************************************n");

gets_s(a);

m = Transfrom(a);

goto new2;

}

void Fib3() // 类似优化一

{

int m;

clock_t us1, us2;

char a[5];

scanf_s("%d", &m);

getchar();

{

printf("对不起,值已经越界,请重新输入,不要大于45!!!!n");

Fib3();

}

new3: us1 = clock();

printf("递归优化三函数计算结果:%ldn", Fib_rec3(1, 1, m));

us2 = clock();

printf("递归优化三函数执行时间%ld毫秒n", us2 - us1);

us1 = clock();

printf("非递归函数计算结果:%ldn", Fib_ite(m));

us2 = clock();

printf("非递归函数执行时间%ld毫秒n", us2 - us1);

printf("************************************n");

printf("* 请选择以下项目: *n");

printf("* a 返回主界面 *n");

printf("* b 退出程序 *n");

printf("* 或者继续键入数字进行计算 *n");

printf("************************************n");

gets_s(a);

m = Transfrom(a);

goto new3;

}

long Fib_rec1(int n) //递归优化一函数

{

if (n == 0 || n == 1)return 1;

else return(Fib_rec1(n - 1) + Fib_rec1(n - 2));

fibonacci数列 Fibonacci数列递归法和迭代法的模块化测试

}

long Fib_rec2(int n) //递归优化二函数

{

if (n == 0 || n == 1)return 1;

if (n == 2)return 2;

if (n == 3)return 3;

else return(Fib_rec1(n - 2) + 2 * Fib_rec1(n - 3) + Fib_rec1(n - 4));

}

long Fib_rec3(int a, int b, int n) //递归优化三函数

{

if (n <= 1)return 1;

if (n == 2)return(a + b);

else Fib_rec3(b, a + b, n - 1);

}

long Fib_ite(int n) // 非递归函数

{

long fib1 = 1, fib2 = 1, fib;

int i;

if (n == 0 || n == 1)return 1;

else

{

for (i = 2; i <= n; i++)

{

fib = fib1 + fib2;

fib1 = fib2;

fib2 = fib;

}

return fib;

}

}

//以下这个函数的意义是当第一次进入某个优化函数时,当把第一次的数字执行完毕时,让用户选择是输入字母选择相应项,还是继续输入数字继续运算

int Transfrom(char a[]) //处理上一个函数给出的字符串

{

char b[3];

if (a[0] >= 65 && a[0] <= 90 || a[0] >= 97 && a[0] <= 122)

//判断字符串首位是否字母,如果字母,进入次级选择函数

SubSelect(a[0]);

else

//数字的话,把数字字符串转化为数字常量,返回处理函数计算。

{

if (atoi(a) < 46)

return(atoi(a));

else

//假如用户的输入数字越界,返回错误信息并让其重新输入

{

printf("对不起,值已经越界,请重新输入,不要大于45!!!!n");

gets_s(b);

Transfrom(b);

}

}

}

void SubSelect(char a)

//次级选择函数,当处理字符串为字母时,传值这里,进行选择,如果有误返回错误信息并跳回主界面

{

switch (a)

{

case 'a':

case 'A': system("cls"); InitMenu(); break;

case 'b':

case 'B':exit(0); break;

default:

printf("输入有误,请重新输入一个值!!!!n");

system("cls");

InitMenu();

break;

}

}

Fibonacci数列递归法和迭代法的模块化测试――注意事项
转载请注明

  

爱华网本文地址 » http://www.413yy.cn/a/8104110103/181963.html

更多阅读

递归法与回溯法一 php递归法

  看过这样一道题,问,“程序结构化设计的三种基础结构,顺序、选择、循环是不是必须的?”当然,你知道这样一个论断,只要有这三种就足够了;但是能不能更少呢?答案是“可以”,原因就是递归能取代循环的作用,例如下面的对一个数组里面元素求和的

转载 用SOR方法解方程组计算方法matlab matlab中sor迭代法

原文地址:用SOR方法解方程组计算方法matlab作者:不再彷徨function [Lw,f]=fifth1(A,b)%输入方程左端系数和右端向量,输出SOR方法的迭代矩阵,%及另一个系数s=size(A);%方程组左端系数矩阵的大小ss=size(b);f=zeros(ss(1),ss(2));%定义一

转载 快速排序法VB和VBA版、递归法版 vba 数组排序函数

先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束。在当前无序区R[1..H]中任取一个数据元素作为比较的"基准"(不妨记为X

声明:《fibonacci数列 Fibonacci数列递归法和迭代法的模块化测试》为网友匿名此分享!如侵犯到您的合法权益请联系我们删除