十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
第一级递归: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
我给你举个简单的例子你就明白了,你可以假设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
满意请采纳
递归有一个堆栈的概念,那就意味着他是一个反理解的过程:就象数学递推一样,你知道第一项,第二项,又知道通项公式,那你就可以知道任何一项。
然后你看代码:fun(0)==0,fun(1)==1;是告诉你一二项。
fun(n)==fun(n-1)+fun(n-2);是告诉你通项公式。那么,你就可以知道任何一项。你这样理解就差不多了,具体机器是怎么操作的,那很复杂的,也不需要明白!!!!
#include "stdio.h"
void fun1(int n,int m){
if(m0)
fun1(n,m-1);
printf("%-2d+%2d = %-2d ",n,m,n+m);
}
void fun2(int n,int m){
if(n0)
fun2(n-1,m);
fun1(n,m-n);
printf("\n");
}
int main(int argv,char *argc[]){
int N;
printf("Input N(int 0=N=99)...\nN=");
if(scanf("%d",N)!=1 || N0 || N99){
printf("Input error, exit...\n");
return 0;
}
fun2(N,N);
return 0;
}
运行样例:
一般来说是自己调用自己,一般有两个分支,一个分支是调用自己,还有一个分支是结束条件
如求n!
int
f(int
n)
{
if(n==1)
//这个是结束条件
return
1;
else
//这个是调用自己的分支
return
n*f(n-1);
}
还有一个比较复杂一点,是双向调用,也就是a函数调用b函数,b函数在调用a函数
这样循环调用,其实基于这个道理,还有多个函数互相调用,不过这样的情况很少见
但万变不离其宗,每个函数都有两个分支,一个是结束条件,一个是调用函数