十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
第一级递归:n=483,i=n/10=48≠0
成都创新互联公司从2013年创立,是专业互联网技术服务公司,拥有项目成都网站设计、做网站、成都外贸网站建设公司网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元云梦做网站,已为上家服务,为云梦各地企业和个人服务,联系电话:18980820575
注意此时先递归调用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
“递归”外在表现出来的形式,是:函数自己调用自己。也就是说:如果我们定义了一个函数fun(),那么,在fun函数体中,fun这个函数自己调用自身 ,这就是表示:递归调用。
我们来看一下,下面这个程序段:
上述C语言程序中,第7行到第10行,就是使用“循环”的方式,来实现从0一直累加到100的和。大部分情况下,“循环”与“递归”之间,都可以相互转换。
在使用递归的时候,需要注意以下两点:
需要有一个“递归出口”,如果没有一个出口,那么递归就会一直执行下去,一直到将“栈空间”占满为止。那时程序就会崩溃,所以一定是要有一个“递归出口”。
如果所要执行的次数比较多,可以尽量选择用“循环”的方式,因为使用“递归”的方式,程序执行的速度会比较慢。
递归有一个堆栈的概念,那就意味着他是一个反理解的过程:就象数学递推一样,你知道第一项,第二项,又知道通项公式,那你就可以知道任何一项。
然后你看代码:fun(0)==0,fun(1)==1;是告诉你一二项。
fun(n)==fun(n-1)+fun(n-2);是告诉你通项公式。那么,你就可以知道任何一项。你这样理解就差不多了,具体机器是怎么操作的,那很复杂的,也不需要明白!!!!
我给你举个简单的例子你就明白了,你可以假设n=3
然后代入这个函数,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
满意请采纳
这句话是不对的。
嵌套是两种结构间的关系,而不是函数间的关系。递归是一个函数调用自身,可以看作是一个函数调用另一个函数中的较特别的例子。
函数嵌套与递归调用的区别函数嵌套是语言特性,递归调用是逻辑思想。
扩展资料:
函数嵌套函数嵌套允许在一个函数中调用另外一个函数。
递归调用而递归是一种解决方案,一种思想,将一个大工作分为逐渐减小的小工作。递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。递归最明显的特点就是,自己调用自己。
函数嵌套就是函数调用函数,是普遍的,递归就是函数调用自身,使函数嵌套的一个特例。嵌套调用就是某个函数调用另外一个函数,递归调用是一个函数直接或间接的调用自己。
C语言可以递归调用,但是(函数)不能嵌套定义。
例如:
int fact(int n)
{
if (n == 0)
return 1;
else
return n * fact(n - 1);
}
图中的递归调用是允许的。
而:
void foo()
{
void bar()
{
// Some code
}
}
这样在函数内定义函数是不允许的。
不过结构体是可以嵌套定义的,例如:
struct test {
int a;
struct demo {
char b;
};
};
这样在结构体内定义结构体,是可以的。