C 递归函数-在编写此函数时需要一些帮助吗

C 递归函数-在编写此函数时需要一些帮助吗,c,C,编写一个递归函数 内部模式记录(内部a、内部b) 取a和b参数,返回a除以b的剩余值 不允许在此函数中使用除法运算符(/)、模运算符(%)和循环。例如,函数调用mod_rec(7,3)和mod_rec(3,5)应分别为1和3。对于无符号整数,函数可以如下所示 unsigned int mod_rec( unsigned int a, unsigned int b ) { if ( a == 0 ) return 0; else return a >= b ? mod_rec

编写一个递归函数 内部模式记录(内部a、内部b) 取a和b参数,返回a除以b的剩余值


不允许在此函数中使用除法运算符(/)、模运算符(%)和循环。例如,函数调用mod_rec(7,3)和mod_rec(3,5)应分别为1和3。

对于无符号整数,函数可以如下所示

unsigned int mod_rec( unsigned int a, unsigned int b )
{
    if ( a == 0 ) return 0;
    else return a >= b ? mod_rec( a - b, b ) : a;
}  
考虑到当右操作数为零时,操作%是定义的。然而,您可以添加检查b是否等于0,在本例中返回0。比如说

unsigned int mod_rec( unsigned int a, unsigned int b )
{
    if ( a == 0 || b == 0 ) return 0;
    else return a >= b ? mod_rec( a - b, b ) : a;
}  
编辑:似乎正确的函数定义如下所示:)


您是否尝试过编写代码来解决此问题?在您的平台上,
INT\u MAX
的价值是什么?而且
mod_rec(200000001,2)
是否应该使用合理的时间和内存返回?由于参数和输出声明为int,函数是否需要处理负数?你的意思是
如果(b==0)返回0
即使那些a/0无效,也不应该堆栈溢出。@Unn据我所知,此操作对于b=0是未定义的。@Unn当然,您可以实现包含检查b==0的函数。如果
b==0未定义,您可以保留
如果(!a)
检查。@EOF否,此检查是必要的。
unsigned int mod_rec( unsigned int a, unsigned int b )
{
    if ( b == 0 ) return 0;
    else return a >= b ? mod_rec( a - b, b ) : a;
}