下面的程序的输出是24.但我无法理解函数f1(参数)的行为。递归函数的返回值
m1 nad m2有一个递归的f1调用。考虑m1和m2保存函数f1的堆栈。 M1堆栈将包含:
1]0,12,a 2]0,6,a 3]0,3,a 4]0,1,a 5]0,0,a
和M2堆栈将包含:
1]13,12,a 2]20,6,a 3]24,3,a 4]26,1,a 5]27,0,a
什么M1和M2值不放?请解释递归函数的这种行为。
#include <stdio.h>
main()
{
int i, n, m, b, x[25];
int f1(int, int, int j[25]);
for(i=0;i<25;i++) x[i] = i;
i=0; m = 24;
b=f1(i, m, x);
printf("res %d\n",b);
}
int f1(int p, int q, int a[25])
{
int m1,m2;
if (q==0)
return(a[p]);
else
{
m1 = f1 (p, q/2, a);
m2 = f1(p+q/2+1,q/2,a);
if(m1<m2)
return (m2);
else
return(m1);
}
}
这是功课吗? – jv42
这看起来有点类似于QSort不是吗? – jv42
@ jv42:不,这不是一个家庭作业。我不明白这是如何输出24. – Angus