C语言 我的find- big- number递归函数返回离散值



我在这个递归函数中有一个问题,它基本上接受两个数字,并返回其中最大的一个,而不使用比较(>|| <)操作符,问题是,它返回自移的值,即使我在变量中保存了起始值。

下面是我的代码:

#include <stdio.h>
int WhoBig(int A, int B) {
int TrueA=A, TrueB=B;
if(A==0)
{
return TrueB;
}
else if(B==0)
{
return TrueA;
}
else 
{
return WhoBig(A-1,B-1);
} 
}
void main() {
printf("%d",WhoBig(9,2));
//Output:7 
}

函数形参的类型及其返回类型应为无符号整型。否则,如果将负值传递给函数,则函数可能调用未定义行为。

你需要做的是在每次递归调用的返回值上加1。否则将返回一个自减的值。

函数可以如下所示

unsigned int WhoBig( unsigned int x, unsigned int y ) 
{
if ( x == 0 )
{
return y;
}
else if ( y == 0 )
{
return x;
}
else 
{
return 1 + WhoBig( x - 1, y - 1 );
} 
}

这是您更新后的程序。

#include <stdio.h>
unsigned int WhoBig( unsigned int x, unsigned int y )
{
if (x == 0)
{
return y;
}
else if (y == 0)
{
return x;
}
else
{
return 1 + WhoBig( x - 1, y - 1 );
}
}
int main( void )
{
printf( "%un", WhoBig( 9, 2 ) );
}

输出为

9

注意,不带参数的函数main应声明为

int main( void )

您并没有真正保存A或B的真实值您将它们保存在变量中,然后返回由WhoBig函数返回的新值我会这样写:

#include <stdio.h>
int WhoBig(int A, int B) {
int TrueA=A, TrueB=B;
if(A==0)
{
return TrueB;
}
else if(B==0)
{
return TrueA;
}
else 
{
return 1 + WhoBig(A-1,B-1);
} 
}
void main() {
printf("%d",WhoBig(9,2));

}

最新更新