C语言,求解答,这俩题一样的,都属于递归算法,当时明白了,但每次都做得特晕。。。

C语言递归函数问题,大小虾都请进!!请问递归的返回过程是怎样的,为什么只有一个return(c),而却有多次的返回值,我苦想了三天都想不出,有劳大家解答,先谢谢了#include&stdio.h&void main(){int age(int n);printf(&%d\n&,age(5);}int age(int n){if(n==1)c=10;elsec=age(n-1)+2;return(c);}
回答1:运行结果是18.首先以5调用ageage判断不是1执行age(5-1)+2,在这里需调用程序自己,所以指令进栈,开始调用age(4)age判断不是1执行age(4-1)+2,在这里需调用程序自己,所以指令进栈,开始调用age(3)age判断不是1执行age(3-1)+2,在这里需调用程序自己,所以指令进栈,开始调用age(2)age判断不是1执行age(2-1)+2,在这里需调用程序自己,所以指令进栈,开始调用age(1)age判断是1执行c=10及return(c),返回10,上步出栈c=10+2=12,return(c),返回12再上一步出栈c=12+2=14,return(c),返回14再上一步出栈c=14+2=16,return(c),返回16再上一步出栈(即第一次入栈的指令)c=16+2=18,return(c),返回18.子程序结束返回调用程序printf(&%d\n&,age(5); )输出18
回答2:调用几次
return几次你应该去知道一点汇编知识,一般的函数调用就是call &函数地址&...ret每次调用的代码段不变,它无非就是call了n次的同一个地址,同时执行ret返回了n次
回答3:一楼、二楼最鄙视你们这种人,想讲就讲一讲,不想讲就顶一下,占着茅坑不拉屎!!!
回答4:哦,三言两语好像我也说不明白。你最好找找关于程序执行栈的资料看看,也许很快理解了。
回答5:。。。如果你看书没看明白的话,估计我讲了你也听不懂
回答6:调用几次return几次。
回答7:5 4 3 2 1
回答8:怎么说呢,你可以认为,递归就是函数调用。返回多次是因为被调用多次。请问递归的返回过程是怎样的,为什么只有一个return(c),而却有多次的返回值,我苦想了三天都想不出,有劳大家解答,先谢谢了& #include &stdio.h$>$ void main()& {int age(int n);& printf(&%d\n&,age(5);& }& int age(int n)& {& if(n==1)& c=10;& else& c=age(n-1)+2;
//只要不满足终止条件,age(n-1)被调用,在age(n-1)里,如果n-1又运行到else,age又会被调用return(c);& }
回答9:探讨你可以认为,递归就是函数调用。返回多次是因为被调用多次。只要不满足终止条件,age(n-1)被调用,在age(n-1)里,如果n-1又运行到else,age又会被调用return(c);
回答10:你画个图,表示一下每次函数调用过程,例如:
|-----------------&age(2)
|-----------------&age(1)
return c &------|
return c &------|
return c &------|
PS:8L比较冲动的说
回答11:  C/C++ code  #include &stdio.h&
void main()
int age(int n);
printf(&%d\n&,age(5));
int age(int n)
c=age(n-1)+2;
return(c);
回答12:按照10楼的图
代码执行到哪一步后暂停,接着调用函数,直到最后一次满足判断条件,不再调用函数。第一次return的结果就是最后一次调用函数的结果。依此类推。
回答13:樓主可以把递归看成是一个盒子套着一个盒子,在最里面有一块小月饼。如果你想知道月饼是什么馅的,那你就得一层层的剥开,尝一小口,哦,是“糖醋鲤鱼”馅的,然后再偷偷的放回去,一层一层的包上。
回答14:我是我是把结构体搞得清清楚之后一下就明白递归了。谢谢!c语言求两个数的最大公因数(穷举法,欧几里得算法,递归)
时间: 13:38:08
&&&& 阅读:42
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&/*主函数Gcd为求公因数的函数输入为负时返回-1*/
int main(){ & int a, &printf("Input a,b:"); &scanf("%d,%d",&a,&b);& if (a & 0 || b & 0)&& printf("Input number should be positive!\n");& else  &printf("Greatest Common Divisor of %d and %d is %d\n",a,b,Gcd(a,b));& return 0;}
/*穷举法一(欧几里得)*/
int Gcd(int a,int b)
  int i,t;
  if(a&=0 || b&=0)&&
  return -1;
  t=a&b ? a :
  for(i=t;i&0;i--)
    if(a%i==0 && b%i==0)
  return 1;
/*穷举法二*/
int Gcd(int a,int b)
  if(a&=0 || b&=0)
  return -1;
    r=a%b;
    a=b;
    b=r;
  }while(r!=0);
/*递归一*/
int Gcd(int a,int b)
  if(a&=0 || b&=0)
    return -1;
  if(a%b==0)
    return Gcd(b,a%b);
/*递归二*/int Gcd(int a, int b){& & if (a &= 0 || b &= 0)&&  return -1;& while (a != b)& {& &&  if (a & b)&&&    a = a -&&  else if (b & a)&&&    b = b - &}&}
/*递归二是根据公因数的如下性质:根据最大公约数的如下3条性质,采用递归法编写计算最大公约数的函数Gcd(),在主函数中调用该函数计算并输出从键盘任意输入的两正整数的最大公约数。性质1& 如果a&b,则a和b与a-b和b的最大公约数相同,即Gcd(a, b) = Gcd(a-b, b)性质2& 如果b&a,则a和b与a和b-a的最大公约数相同,即Gcd(a, b) = Gcd(a, b-a)性质3& 如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd(a, b) = a = b
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/didiaoxiaoguai/p/6703465.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!

我要回帖

更多关于 递归 的文章

 

随机推荐