十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
首先要理解递归的概念,先递后归
创新互联公司长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为温江企业提供专业的成都网站制作、网站建设、外贸网站建设,温江网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
开始递
get(1) n=1不成立,执行else
get(2) n=2不成立,执行else
get(3) n=3不成立,执行else
get(4) n=4不成立,执行else
get(5) n=5不成立,执行else
get(6) n=6不成立, 执行else
get(7) n=7不成立, 执行else
get(8) n=8不成立, 执行else
get(9) n=9不成立 执行else
get(10) n=10成立,返回值1
开始归!
get(10) num=1
get(9) get(n+1)*2+2 = 1*2+2=4 //这里说下为什么不在递的时候计算else呢?因为在递的时候我们并不知道他们上一次的值,所以是没办法计算的,这里get(n+1)已经知道了上一次的值get(10)是1。
get(8) get(n+1)*2+2 = 4*2+2 =10
get(7) get(n+1)*2+2 = 10*2+2 = 22
get(6) get(n+1)*2+2 = 22*2+2 = 46
get(5) get(n+1)*2+2 = 46*2+2 = 94
get(4) get(n+1)*2+2 = 94*2+2 = 190
get(3) get(n+1)*2+2 = 190*2+2 = 382
get(2) get(n+1)*2+2 = 382*2+2 = 766
get(1) get(n+1)*2+2 = 766*2+2 = 1534
至此递归条件结束
答案为B:
int f(int t[],int n)定义了一个int类型的函数,s=f(a,4)是将数组a传递给了t[],4传递给了n,遇到f就调用f定义的函数,直到n=0。最后s=t[3]+t[2]+t[1]+t[0],因为将a传递给了t[],所以s=4+3+2+1=10.
递归函数有三点要求:
1,递归的终止点,即递归函数的出口
2,不断的递归调用自身
3,递归函数主体内容,即递归函数需要做的事情
ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根据不同的需要合并,比如,有时候递归函数的主体就是返回调用下层函数所得到的结果。
具体例子如下:
void fun(int n)
{
if(n=0) return; //1 这是递归的终点,即出口
fun(n-1); //2、递归函数自身的调用
coutnendl; //3 递归函数的主体内容
}
2,3合并的情况
int fun(int n)
{
if(n=0) return 0;
return fun(n-1)+fun(n-2); //2 3合并
}
#include stdio.h
#include math.h
double mysqrt(double a, double x0)
{
if (a0)return -1;
double x1 = 1.0 / 2 * (x0 + a / x0);
if (fabs(x1 - x0) 1e-5)return x1;
return mysqrt(a, x1);
}
int main()
{
double a, x0 = 1.0;
printf("Enter a:");
scanf("%lf", a);
printf("The sqrt of %lf=%lf\n", a, mysqrt(a, x0));
return 0;
}