题目:已知整数a,b,假设函数succ(x) = x + 1, pred(x) = x -1 ,不许直接用 “+” 、“-”运算符号,也不许用循环语句,只能利用函数succ()和pred(),试编写计算:a + b 、a - b 的递归函数add(a,b), sub(a, b),并在主程序中验证该函数的正确性。这是一个实验考试题,想了许多也不知道,请各位帮帮忙!谢!

解决方案 »

  1.   

    add(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)));
    }
      

  2.   

    int add(a, 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));
      }
    }
      

  3.   

    Sorry,刚才忘了考虑负数了,长时间不写算法真的退步了~int add(a, 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)); 
      }
    }
      

  4.   

    #include <stdio.h>
    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()就行了,自己写吧
      

  5.   

    我修改一下函数体,支持所有整数了...
    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);}
    }