二、 编写一个递归函数,计算并返回斐波那契数列中第n项的值,斐波那契数列定义如下:

作者&投稿:长辉 (若有异议请与网页底部的电邮联系)
用递归函数求斐波那契数列的第n项的值~

#include
int Fibonacci(int n)
{
if( n == 1 || n == 2) // 递归结束的条件,求前两项
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2); // 如果是求其它项,先要求出它前面两项,然后做和。
}
int main()
{
int n;
printf("please input n: ");
scanf("%d",&n);
printf("Result: %d
",Fibonacci(n));
return 0;
}
在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。
扩展资料:
一个完全是自然数的数列,通项公式却是用无理数来表达的。而且当n趋向于无穷大时,前一项与后一项的比值越来越逼近黄金分割0.618(或者说后一项与前一项的比值小数部分越来越逼近0.618)。
从第二项开始,每个偶数项的平方都比前后两项之积少1,每个奇数项的平方都比前后两项之积多1。
如:第二项1的平方比它的前一项1和它的后一项2的积2少1,第三项2的平方比它的前一项1和它的后一项3的积3多1。
注:奇数项和偶数项是指项数的奇偶,而并不是指数列的数字本身的奇偶,比如从数列第二项1开始数,第4项5是奇数,但它是偶数项,如果认为5是奇数项,那就误解题意,怎么都说不通。
参考资料来源:百度百科--斐波那契数列


.

#include

fib(int n)

{if(n==0)return(0);

else if(n==1)return(1);

else

return(fib(n-1)+fib(n-2));

}

main()

{int n,s;

scanf("%d",&n);

s=fib(n);

printf("%d
",s);

}

扩展资料:

scanf用法:

输出的值只是空格前面的字符是因为scanf函数的输入格式错误,输入参数的变量前需要加&。

scanf("%s",s);改为scanf("%s",&s);

scanf的用法是:scanf("格式控制字符串",输入参数一,输入参数二);

格式控制字符串包含:格式控制说明,普通字符。

1、格式控制字符串表示输入的格式,(int型用%d,float用%f,double型用%lf)

2、普通字符:在输出数据的时候,按照原样输出的字符,如:"fahr=%d,celsius=%d
"中的fahr=,celsius=。

3、输入的参数是变量的地址,所以要在变量前面加&。



#include <stdio.h>

int Fibonacci(int n)
{
if( n == 1 || n == 2) // 递归结束的条件,求前两项
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2); // 如果是求其它项,先要求出它前面两项,然后做和。
}

void main()
{
int n;

printf("please input n: ");
scanf("%d",&n);

printf("Result: %d\n",Fibonacci(n));

}

#include<iostream>
int F(int n);
using namespace std;

int main()
{
int num;
cout<<"please enter a non-negtive number: "<<endl;
cin>>num;
int array[num];
cout<<"the fibonacci of "<<num<<" is: "<<endl;
for(int i=0;i<=num;i++)
{
array[i]=F(i);
cout<<array[i]<<" ";

}
system("PAUSE");
return 0;
}
int F(int n)
{
if(n==0)
return 0;
if(n==1)
return 1;
else
return F(n-1)+F(n-2);
}


蓝山县13229201979: 编写一个递归函数,计算并返回阿克马函数值 -
字蓓麝香: #include#include int Ack(int n,int x,int y) { if(n==0) return x+1; else if(n==1&&y==0) return x; else if(n==2&&y==0) return 0; else if(n==3&&y==0) return 1; else if(n>=4&&y==0) return 2; else if(n!=0&&y!=0) return Ack(n-1,Ack(n,x,y-1),x); } main() { int n,x,...

蓝山县13229201979: 怎么编写一个递归函数??? -
字蓓麝香: #include<stdio.h> unsigned long power( unsigned int q,unsigned int n ); int main() { unsigned int number; unsigned int n; printf( "输入你的底数: " ); scanf( "%d", &number ); printf( "输入你的次数: " ); scanf( "%d", &n ); printf...

蓝山县13229201979: 用c语言编写一个递归函数"intabc(inta[],intn)",求出数组a中所有n个元素之积并返回 -
字蓓麝香: int abc(int a[],int n) {if(n==0)return a[0];else return a[n-1]*abc(a[],n-2); }

蓝山县13229201979: 编写一个递归函数fun,计算并返回正整数n的阶乘 -
字蓓麝香: C语言的递归函数:long fac(int n) { if(n==0)return 1L; else return n*fac(n-1); }

蓝山县13229201979: 编写一个递归函数,计算并返回阿克玛(Ackermann)函数值. -
字蓓麝香: #include ack(int n,int x,int y) {if(n==0) return(x+1); else if(n==1&&y==0) return(x); else if(n==2&&y==0) return(0); else if(n==3&&y==0) return(1); else if(n>=4&&y==0) return(2); else return(ack(n-1,ack(n,x,y-1),x)); } main() {int n,x,y,result; scanf("%d,%...

蓝山县13229201979: 编写一个计算此函数的递归函数. -
字蓓麝香: 大概是这个样子: int depth(BTree *b){ int dep1, dep2; if(b==NULL) return 0; else{ dep1 = depth(b->left); dep2 = depth(b->right); return dep1>dep2?:dep1+1:dep2+1; } } 思路为:递归各求出左右子数的深度dep1,dep2,返回Max(dep1,dep2)+1

蓝山县13229201979: 编写一个递归算法,统计并返回以BT 为树根指针的二叉树中的叶子结点的各数. -
字蓓麝香: int count(BTreeBNode *BT) {int number=0; if(BT->lchild==NULL&&BT->rchild==NULL)return 1;//若该节点为叶子节点,个数加1 else if(BT==NULL)return 0;//该节点的父节点之有一个孩子 else return count(BT->child)+count(BT->rchild); }

蓝山县13229201979: 编写一个递归算法,统计并返回以BT为树根指针的二叉树中的叶子结点的个数. int Count (BTreeNode*BT) -
字蓓麝香: 楼主哥哥,看下面,你把这个函数看成一个f(x) 当x=NULL f(x)=0; 当x左右子树为空 f(x)=1; 其他 f(x)=f(bt->lchild)+f(bt-rchild) ----------------------------------------------------------------------- int Count(BTreeNode *BT) {int l,r;if(BT==NULL) return 0;else if(BT-...

蓝山县13229201979: 怎么编写一个递归函数,该函数将一个整数的低位变为高位,高位变成低位,从而组成另一个整数返回.谢谢! -
字蓓麝香: 给你个非递归的参考一下:#include <stdio.h> int main() { int a,b=0; scanf("%d",&a); while(a) { b=b*10+a%10; a/=10; } printf("%d\n",b); return 0; }

蓝山县13229201979: 用C++语言编写一个递归算法,返回一个数组A中前n项和 -
字蓓麝香: int sum(int *A, int n) { if (n==1) { return A[0]; } return sum(A, n-1) + A[n-1]; }用数学来表示,就是:S1 = A1 Sn = Sn-1 + An 但c++数组是从0计数的,所以 S1 = A0 Sn = Sn-1 + An-1

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