我给你举个简单的例子你就明白了,你可以假设n=3
创新互联公司拥有10年成都网站建设工作经验,为各大企业提供成都网站制作、成都网站建设、外贸营销网站建设服务,对于网页设计、PC网站建设(电脑版网站建设)、成都app开发、wap网站建设(手机版网站建设)、程序开发、网站优化(SEO优化)、微网站、域名与空间等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了很多网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等网站化运作于一体,具备承接各种规模类型的网站建设项目的能力。
然后代入这个函数,a(3)=a(2)+5;而a(2)=a(1)+5;a(1)=1
所以最后就是a(3)=1+5+5=11…
同理你可以算出a(10)=1+5*9=46
满意请采纳
下面演示一个斐波那契数列前N项和#include stdio.h
#define COL 10 //一行输出10个
long scan()
{ //输入求fibonacci函数的第N项
int n;
printf("Input the N = ");
scanf("%d",n);
return n;
}
long fibonacci(int n)
{ //fibonacci函数的递归函数
if (0==n||1==n) { //fibonacci函数递归的出口
return 1;
}
else {
return fibonacci(n-1)+fibonacci(n-2);
//反复递归自身函数直到碰到出口处再返回就能计算出第n项的值
}
}
int main(void)
{
int i,n;
n = scan();
printf("Fibonacci数列的前%d项\n", n);
for (i=0; in;) //输出fibonacci函数前n项每项的值
{
printf("%-10ld",fibonacci(i++)); //调用递归函数并且打印出返回值
if(i%COL==0)
{ //若对COL取余等于0就换行,也就是控制每行输出多少个,
//而COL=10就是每行输出10个
printf("\n");
}
}
printf("\n");
return 0;
}
这段程序的意思是对传来的参数n,如果n1,程序会崩溃;如果n1则没大1,返回就多2,最后必然会执行c=10。比如n=5,则返回的是18((5-1)x2+10=18)
比如说做了5次递归,即n=5;执行的操作如下:
第1次调用(n=5) ,定义了一个intc;
第2次调用(n=4) ,定义了一个intc;
第3次调用(n=3) ,定义了一个intc;
第4次调用(n=2) ,定义了一个intc;
低5次调用(n=1) ,定义了一个intc;
n=1时,满足了条件n==1,故此时c=10;
第5次返回,此时第5次定义的c=age(int n)=10;前4次定义的int c没有值,下同
第4次返回 ,此时第4次定义的c=age(int n)+2=10+2=12
第3次返回,此时第3次定义的c=age(int n)+2=12+2=14
第2次返回,此时第2次定义的c=age(int n)+2=14+2=16
第一次返回,此时第一次定义的c=age(int n)+2=16+2=18。此时按下面的程序b接收了返回值
我觉得你应该注意的是age(int n)本身就代表一个int值,就算没有参数接收也可以参与到运算当中,就像这个例子一样。
程序:
#includestdio.h
int age(int n)
{int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return c;
}
void main()
{
int a=0,b=0;
scanf("%d",a);
b=age(a);
printf("result is %d\n",b);
}
所谓递归,说的简单点,就是函数自己调用自己,然后在某个特定条件下。结束这种自我调用。
如果不给予这个结束条件,就成了无限死循环了。这样这个递归也就毫无意义了。
如下面问题
1 1 2 3 5 8 13 21 ........n
分析可以看出, i 表示第几个数, n 表示该数的值
当i = 1 时, n = 1;
当i = 2 时, n = 1;
当i = 3 时 n = i1 + i2;
当i = 4 时 n = i2 + i3
所以可以写个函数
int fun(int n) // 这里的n代表第几个数
{
if(1 == n || 2 == n) // 第一个数
{
return 1;
}
else
{
return fun(n - 1) + fun(n - 2); // 这里就是自己调用自己,形成循环自我调用。
}
}
注: 以上代码只是用来演示递归,不包含错误校验。
在实际生产过程中。该代码不够健壮。
如此,就完成了递归。你就可以求得第n个数了。
何时考虑使用递归。
当你分析一个问题的时候,发现这个问题,是一个自我循环时,而且这个自我循环到一个给定值,就可以终止的时候,你就快要考虑递归了。
第一级递归:n=483,i=n/10=48≠0
注意此时先递归调用convert(48),待递归返回再输出当前n的个位数字n%10=3
第二级递归:n=48,i=n/10=4≠0
此时继续递归调用convert(4),待递归返回再输出当前n的个位数字n%10=8
第三级递归:n=4,i=n/10=0
此时递归终止,先输出当前n的个位数字n%10=4
再返回上一级递归输出8,最后返回第一级递归输出3
因此最终输出为:4 8 3
递归就是函数自己调用自己的函数。
其实递归函数的调用和其他一般函数调用没有什么区别,只是在形式上能够建立循环的逻辑调用。
递归函数一定有个基本要求,就是肯定会满足某种条件,不再调用自身。(否则就无限递归,直到内存溢出)。
例如,我们计算1到100的所有数相加。
int addRecursion(int curTotle, int a) {
if(a0)
return addRecursion(curTotle+a, a-1);
return curTotle;
}
调用: int result = addRecursion(0,100);
result 的结果就是1到100所有数的总数。