C语言用递推和递归两种算法完成斐波那契数列的计算,给一下代码

作者&投稿:褒福 (若有异议请与网页底部的电邮联系)
C语言如何使用递归算法处理斐波那契数列?~

//求第n项的递归函数
long long fib(int n)
{
if(n<=0)
return 0;
if(1==n || 2==n)
return 1;
return fib(n-1)+fib(n-2);
}

用递归法求斐波那契数列前40项方法为:
1、首先,对非法下标进行判断。

2、定义出递归调用的出口n=1或n=2,直接返回1。


3、使用递归直接调用自身即可,不需要使用数组存储,而是使用压入栈 的数据。注意idea中侧边会显示递归的小圈。

4、添加测试函数,输出前5项与前10项。

5、测试结果如下。

注意事项:
斐波那契数列在自然科学的其他分支,有许多应用。例如,树木的生长,由于新生的枝条,往往需要一段“休息”时间,供自身生长,而后才能萌发新枝。

//递归法
int fibo1(int n)
{
if( n == 1 || n == 2) return 1;
else return fibo1(n-1)+fibo1(n-2);
}
//递推法
int fibo2(int n)
{
int f0=1,f1=1,f;
if (n<2)
return 1;
for(int i=2;i<n-1;i++)
{
f=f0+f1;
f0=f1;
f1=f;
}
return f;
}
区别:递推是直接使用已知的条件去推出未知的条件;递归则是将大问题逐渐转化为若干个相同的子问题,直到得到已知的最小子问题,再回溯依次得到父问题的答案。是由未知到已知,再从已知到未知。对于复杂的问题,递归把问题简单化,读起来易懂。

//递归,就是函数自己调用自己
#include <stdio.h>
int feibonaqie(int n)
{
if(n == 0 )
return 0;
if(n == 1)
return 1;
else
return feibonaqie(n-1) + feibonaqie(n-2);
}
int main(void)
{
int n = 20 ;//假设输出20个数吧
int i;
for(i = 0; i <= n; i++)
printf("%d ",feibonaqie(i));
}

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
clock_t start, finish;
double duration=0;
int n;
printf ("input the data n=:");
scanf ("%d",&n);
start = clock();
fib(n);
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "递归法用时=%f seconds\n", duration );
start = clock();
fic(n);
finish = clock();
duration = (double)(finish - start) / CLOCKS_PER_SEC;
printf( "递推法用时=%f seconds\n", duration );
}
//递归法
int fib(int n)
{
if( n == 1 || n == 2) return 1;
else return fib(n-1)+fib(n-2);
}
//递推法
int fic (int n)
{
int f0=1,f1=1,f2,i=2;
if (n<2)
return(n);
while (i<=n)
{
f2=f1+f0;
f0=f1,f1=f2;
i++;
}
return f2;
}
此段程序将递归法和递推法计算斐波拉契函数的时间详细计算出,可以比较两个算法的时间复杂性。显然此处递推比递归算法要好得多。
递推就是从前往后推,递归还有个回溯的过程,通过调用自身函数完成计算。

n==2呢??


C语言用递推和递归两种算法完成斐波那契数列的计算,给一下代码_百度知...
\/\/递归法 int fibo1(int n){ if( n == 1 || n == 2) return 1;else return fibo1(n-1)+fibo1(n-2);} \/\/递推法 int fibo2(int n){ int f0=1,f1=1,f;if (n<2)return 1;for(int i=2;i<n-1;i++){ f=f0+f1;f0=f1;f1=f;} return f;} 区别:递推是直接使...

递推法和递归法区别是什么?
1、递推法:递推算法是一种根据递推关系进行问题求解的方法。通过已知条件,利用特定的递推关系可以得出中间推论,直至得到问题的最终结果。递推算法分为顺推法和逆推法两种。 2、递归法:在计算机编程中,一个函数在定义或说明中直接或间接调用自身的编程技巧称为递归。通常把一个大型复杂的问题...

递归和递推有什么区别?
递归法:递归是递推的一种,只不过它是对待问题的递推,直到把一个复杂地问题递推为简单的以解的问题,然后再一步步返回,从而得到原问题的解。程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把...

递推算法和递归算法有什么区别
1、算法的过程不同 递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法。递归算法在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。2、递推算法免除...

递归与迭代(递推)有什么区别
zwu说到点子上了。递归是自顶向下逐步拓展需求,最后自下向顶运算。即由f(n)拓展到f(1),再由f(1)逐步算回f(n)迭代是直接自下向顶运算,由f(1)算到f(n)。

请教关于迭代,递归,递推概念上的区别
递归与递推区别:递归的步骤中包含递推,如一个规模为n的问题,递归首先通过回溯将问题回溯到n-1,n-2……,然后再通过递推从1的结果一直递推到n。递归与迭代的区别:递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成...

麻烦各位大神可以用C语言描述这道题目么,用代码,谢谢
一、递推法:main(){ int n,i;float a=1200,b;scanf("%d",&n);for(i=1;i<n;i++)b*=1+10.0\/100;printf("第%d年的工资是%5.0f元。\n",n,b);} 二、递归法 float f(float a,float v,int n){ if(n==1)return a;else return (1+v)*f(a,v,n-1);} main(){ ...

递归和递推有什么不一样。用起来哪个快一些??
递推就是递推循环,递推或者说循环比递归更容易理解和运用,但递归算法在运行速度上更快,代码也比较简洁。递归算法也有缺点,主要是空间消耗比较大。从数学上说,所有的递归算法都可以用递推(循环)算法代替,但不是所有的循环算法都可以被递归代替。

关于C中的递归和递推?有点晕,新手多包涵
我想你要说的是递归和循环(从程序执行角度,递推比较侧重逻辑推理)。递归可以看作一个逆向求解的过程,循环则可以看作一个正向求解的过程。unsigned long fac0(int n){ return (n == 0 ? 1 : n * fac0(n-1));} unsigned long fac1(int n){ int i;unsigned long r;for (r = 1, ...

C语言中什么叫算法,算法在程序设计中的重要作用
递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解。例如上例中,求解fib(n),把它推到求解fib(n-1)和fib(n-2)。也就是说,为计算fib(n),必须先计算fib(n-1)和fib(n-2),而计算fib(n-1)和fib(n-2),又必须先计算...

汉南区15855579670: C语言用递推和递归两种算法完成斐波那契数列的计算,给一下代码 -
叔龚丽科: //递归法 int fibo1(int n) { if( n == 1 || n == 2) return 1; else return fibo1(n-1)+fibo1(n-2); } //递推法 int fibo2(int n) { int f0=1,f1=1,f; if (n<2) return 1; for(int i=2;i<n-1;i++) { f=f0+f1; f0=f1; f1=f; } return f; } 区别:递推是直接使用已知的条件去推出未知的...

汉南区15855579670: 斐波那契数列的算法 -
叔龚丽科: #include<stdio.h>void Fdt(long F1,long F2,int N);//递推 void Fdg(long F1,long F2,int N);//递归 main() {int n=20;long f1,f2;f1=f2=1;Fdt(f1,f2,n);printf("\n\n");Fdg(f1,f2,n);} void Fdt(long F1,long F2,int N)//递推 {for(int i=1;i<=N;i++){...

汉南区15855579670: C语言 计算fibonacci数列? -
叔龚丽科: C语言程序代码如下:#include <stdio.h>main(){long int f1,f2;int i;f1=1;f2=1;for (i=1;i<=9;i++){ printf("%ld %ld ",f1,f2);if (i%3==0) printf("\n");f1=f1+f2;f2=f2+f1; } return 0;} if语句是使输出6个数后换行.因为i是循环变量,当i为偶数时换行,因此i每隔2换一次行相当于每输出6个数后换行. 输出结果如下

汉南区15855579670: C语言 用递归法求斐波那契数列第n项值 不要复制粘贴的 -
叔龚丽科: #include <stdio.h> int fun(int n) { if( n == 1 || n == 2) // 递归结束的条件,求前两项 return 1;else return fun(n-1)+ fun(n-2); // 如果是求其它项,先要求出它前面两项,然后做和.} int main() { int n; printf("please input n: "); scanf("%d",&n); printf("Result: %d\n", fun(n)); return 0; } 哪儿不明白就继续追问

汉南区15855579670: c语言编程,用递归实现Fibonacci数列 -
叔龚丽科: #include<stdio.h> #define N 20 int Fibonacci(int n) { if(n == 1 || n==2) return 1; else return Fibonacci(n-1)+Fibonacci(n-2); } void main() { int i = 0; for(i=1;i<=N;i++) { printf("%5d",Fibonacci(i)); if(i%5 == 0) printf("\n"); } printf("\n"); } 只要修改宏定义N的值,就可以输出斐波那契数列的前N项.

汉南区15855579670: C语言怎样用函数的递归调用法输出斐波那栔数列 -
叔龚丽科: #include <stdio.h> int Fibona(int n) { int m;if(n==1||n==2) return(1); return Fibona(n-1)+Fibona(n-2); } int main() { int n; scanf("%d",&n); printf("%d\n",Fibona(n)); return 0; }

汉南区15855579670: 斐波拉切数列的C语言代码 -
叔龚丽科: 帮你写了下这个代码,主要是应用递归的思想写这个程序 思路会很清晰#include <stdio.h> int Fibona( int n ); int main(void) { printf("%d",Fibona(4)); return 0; }int Fibona( int n ) { int m; if(n == 1){return 1;}else if(n == 2){return 1;}else{m = Fibona(n-1) + Fibona(n-2);return m;} }截图如下:如果还有什么不明白的地方可以来问我哈 加油哟

汉南区15855579670: C语言编写斐波那挈数列 -
叔龚丽科: 应该定义成长整型,要不然会数据溢出,下面用两种方法实现此问.个人认为,第二种方法好. 第一种:循环 #include<stdio.h> void main() { int i; long f1=1,f2=1; printf("前15组菲薄纳妾数列为\n"); for(i=0;i<15;i++)/*共输15组数,即30个*/ {...

汉南区15855579670: C语言程序实现斐波那契数列的解题思路??? -
叔龚丽科: 斐波纳契数第三项起:每一项都是前两项之和!这里可以用递归或者循环的方法!楼上的给了递归的代码! 我写一个模板递归的方法(速度更快,无需执行任何函数和循环,但是实用性低) 代码用于计算第十项的斐波纳契数和前十项和:#...

汉南区15855579670: 使用c语言编写一个使用迭代计算斐波那契数列中第n项的函数 -
叔龚丽科: |c语言编写2113一个使用迭代计算斐波那5261契数列中第n项的函数:4102 #include <stdio.h> int Fibonacci(int n) {if( n == 1 || n == 2) // 递归结束的条件,求前两项1653return 1;elsereturn Fibonacci(n-1)+Fibonacci(n-2); // 如果是求其它项版...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网