问答题 [说明] 下面的程序利用递归算法计算x和y的最大公约数。 [函数2.1] main ( ) { int x,y,k,t; scanf(" % d% d" , &x, &y); if(x>y) { t=x;x=y; y=t;} {{U}} (1) {{/U}}; while(k! =0){ y=x; {{U}}(2) {{/U}}; k=y%x; } prinff( "% d" ,x); } [函数2.2说明] 函数fun(char *str,char *substr的功能是计算子串sugbstr在串str中出现的次数。 [函数2.2] fun(ehar * str, char * substr) { int x,y,z; {{U}}(3) {{/U}}; for(x=0;str[ x] ! = '/O';x + + ) for(y=x,z=0;sabstr[z] = =str[y];{{U}} (4) {{/U}},y+ +) if( (5) = ='/0') { num + +; break; } return(num); }
【正确答案】
【答案解析】k=y%x (2)x=k (3)int num=0 (4)z++ (5)substr[z+1] (1)~(2)使用递归算法计算x和y的最大公约数时,不妨令y≥x,如果y除x余数得。则x即为所求;否则令y←x,x←余数,继续上述判断。 (3)此处应声明变量num并初始化; (4)次循环的功能是从str的第y个位置起与substr做比较,循环过程中y和z应同时增1; (5)若上面的循环重复执行,直到到达substr结束,则表示substr在str中出现一次。