下面的程序的輸出是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