我试图编写一个递归函数,它获取一个十进制数并以十六进制打印该值 但我不知道我的代码中有什么 请帮助我,我仍然是Recursion中的新手,并且不会得到它... ...
my code:
void PrintHexadecimalNumber(int n)
{
if (n%16==0)
return ;
PrintHexadecimalNumber(n/16);
switch ((n % 16))// A-F cases
{
case (10):
printf("A");
break;
case (11):
printf("B");
break;
case (12):
printf("C");
break;
case (13):
printf("D");
break;
case (14):
printf("E");
break;
case (15):
printf("F");
break;
}
if ((n%16)<10)
printf(n%16);
}
答案 0 :(得分:3)
由于您为停止递归而进行的测试,您的代码无法正常工作。
if (n%16==0)
如果您有数字(十六进制)10,该函数将立即停止,因为n%16将为0.您实际想要测试的是n
为0时。
if (n==0)
您的switch
语句也应该扩展为包含值0到9,而不是在其后面添加单独的if
语句。您可以通过省略break
switch(n % 16)
{
/* existing case statements go here */
case 0:
case 1:
case 2:
...
case 9:
printf("%d",n % 16); // also fixing this as per comments above.
break;
}
或者您可以使用printf("%x",n % 16)
并完全取消switch
,如果您尝试做的是探索递归的工作方式。