题目:已知整数a,b,假设函数succ(x) = x + 1, pred(x) = x -1 ,不许直接用 “+” 、“-”运算符号,也不许用循环语句,只能利用函数succ()和pred(),试编写计算:a + b 、a - b 的递归函数add(a,b), sub(a, b),并在主程序中验证该函数的正确性。这是一个实验考试题,想了许多也不知道,请各位帮帮忙!谢!
调试欢乐多
{
if (b == 0)
return a;
if (b == 1)
return succ(a);
if (b == -1)
return pred(a); if (b > 0)
return succ(add(a, pred(b)));
if (b < 0)
return pred(add(a, succ(b)));
}sub(a, b)
{
if (b == 0)
return a;
if (b == 1)
return pred(a);
if (b == -1)
return succ(a); if (b > 0)
return pred(sub(a, pred(b)));
if (b < 0)
return succ(sub(a, succ(b)));
}
{
if (0 == b)
{
return a;
}
else
{
return (succ(a), pred(b));
}
}int sub(a, b)
{
if (0 == b)
{
return a;
}
else
{
return (pred(a), pred(b));
}
}
{
if (0 == b)
{
return a;
}
else
{
return (succ(a), (b > 0) ? pred(b) : succ(b));
}
}int sub(a, b)
{
if (0 == b)
{
return a;
}
else
{
return (pred(a), (b > 0) ? pred(b) : succ(b));
}
}
int succ(int x)
{
return x+1;
}
int add(int a,int b)
{
int iAdd;//保存函数的返回值
if(b==1){iAdd=succ(a);}
else iAdd=succ(add(a,b-1));
return (iAdd);
}
void main()
{
int iAdd;
iAdd=add(2,8);
printf("%d\n",iAdd);
}
sub的函数体只要把succ()替换成pred()就行了,自己写吧
int add(int a,int b)
{
int iAdd;//保存函数的返回值
if(b>0){
if(b==1){iAdd=succ(a);}
else iAdd=succ(add(a,b-1));
return (iAdd);}
if(b<0){
if(b==-1){iAdd=pred(a);}
else iAdd=pred(add(a,b+1));
return (iAdd);}
if(b==0){return (a);}
}