嗨,一个小的更正您的代码返回输入号码的第一位(不是最后一位)。这是原因
您在返回一些这样的值后计算 revNum
return(rev(number/10)+revNum);
revNum=(number%10)*sum; sum=sum/10;
因此第二个语句无效。
revNum也是一个局部变量
因此,每次调用递归函数时,都会创建sum(局部变量)和 revNum 的新本地副本,并分别使用 0 和 100 进行初始化。
你的递归树看起来像这样,例如596是传递给递归函数的数字。
rev(596) //call from main
rev(59)-->rev(5) // these are recursive calles
现在 rev(5) 将 5(since 5 < 9) 返回给调用者,即从那里将 rev(59) 返回给 main 中的调用者,从而显示第一个数字,在本例中为 5。
如何解决?
要解决这个问题,你必须让它们成为全局变量(sum 和 revNum),在计算反向数之后,return 语句也应该在最后。这是简单的代码。
我将反向变量设置为全局变量以保留其中的更改,最后我将其返回给调用者。
#include <stdio.h>
int reverse; //globally declared
int rev(int revNum)
{
if(revNum)
{
reverse = (reverse * 10) + (revNum % 10);
rev(revNum/10); //recursive call
}
else
return; //return back to caller when revNum becoms 0
return reverse;
}
int main()
{
int num;
printf("Enter a number:");
scanf("%d",&num);
printf("Reverse Number is:%d\n",rev(num));
return 0;
}