C 整数递归搜索
我在尝试用C语言进行递归编程时遇到了一些问题。以下是预期输出:C 整数递归搜索,c,if-statement,recursion,C,If Statement,Recursion,我在尝试用C语言进行递归编程时遇到了一些问题。以下是预期输出: Enter a number: 1234567 Enter the digit position: 3 rDigitValue1(): 5 rDigitvalue2(): 5 这是我的代码: int rdigitValue1(int num, int k) { int count = 0, output; if (count != k) { rdigitValue1(num / 10, k);
Enter a number: 1234567
Enter the digit position: 3
rDigitValue1(): 5
rDigitvalue2(): 5
这是我的代码:
int rdigitValue1(int num, int k)
{
int count = 0, output;
if (count != k) {
rdigitValue1(num / 10, k);
count++;
}
else {
output = (num % 10);
}
return output;
}
参数num
是数字,而参数k
是位置。使用这些代码,当我试图运行程序时,它只是崩溃了,没有提示任何错误消息。有什么想法吗
修改
你的堆栈溢出了!您永远不会减少数字位置并保持循环。您当前的代码可以简化为:
int rdigitValue1(int num, int k)
{
if (k != 0) {
rdigitValue1(num / 10, k);
}
}
你的堆栈溢出了!您永远不会减少数字位置并保持循环。您当前的代码可以简化为:
int rdigitValue1(int num, int k)
{
if (k != 0) {
rdigitValue1(num / 10, k);
}
}
你的堆栈溢出了!您永远不会减少数字位置并保持循环。您当前的代码可以简化为:
int rdigitValue1(int num, int k)
{
if (k != 0) {
rdigitValue1(num / 10, k);
}
}
你的堆栈溢出了!您永远不会减少数字位置并保持循环。您当前的代码可以简化为:
int rdigitValue1(int num, int k)
{
if (k != 0) {
rdigitValue1(num / 10, k);
}
}
对于递归调用,您应该使用
k-1
,不断测试k==0
,当然永远不会,因为对k
一直使用相同的值。您还需要存储递归调用返回的值,以便可以返回:
output = rdigitValue1(num / 10, k - 1);
对于递归调用,您应该使用
k-1
,不断测试k==0
,当然永远不会,因为对k
一直使用相同的值。您还需要存储递归调用返回的值,以便可以返回:
output = rdigitValue1(num / 10, k - 1);
对于递归调用,您应该使用
k-1
,不断测试k==0
,当然永远不会,因为对k
一直使用相同的值。您还需要存储递归调用返回的值,以便可以返回:
output = rdigitValue1(num / 10, k - 1);
对于递归调用,您应该使用
k-1
,不断测试k==0
,当然永远不会,因为对k
一直使用相同的值。您还需要存储递归调用返回的值,以便可以返回:
output = rdigitValue1(num / 10, k - 1);
预期产出:
rDigitvalue2(): 5
电流输出:
rDigitvalue2(): 1234567
您编写的函数是:
void rdigitValue2(int num, int k, int *result)
{
if (k != 1) {
rdigitValue2(num / 10, k - 1, result);
*result = num;
}
else {
*result = num % 10;
}
}
上述函数在我的g++编译器中运行良好。函数末尾的*result的值是1234567,因为递归调用以*result=num行结尾。
您需要删除此行并将函数修改为:
void rdigitValue2(int num, int k, int *result)
{
if (k != 1) {
rdigitValue2(num / 10, k - 1, result);
}
else {
*result = num % 10;
}
}
输出:rDigitvalue2():5
预期输出:
rDigitvalue2(): 5
电流输出:
rDigitvalue2(): 1234567
您编写的函数是:
void rdigitValue2(int num, int k, int *result)
{
if (k != 1) {
rdigitValue2(num / 10, k - 1, result);
*result = num;
}
else {
*result = num % 10;
}
}
上述函数在我的g++编译器中运行良好。函数末尾的*result的值是1234567,因为递归调用以*result=num行结尾。
您需要删除此行并将函数修改为:
void rdigitValue2(int num, int k, int *result)
{
if (k != 1) {
rdigitValue2(num / 10, k - 1, result);
}
else {
*result = num % 10;
}
}
输出:rDigitvalue2():5
预期输出:
rDigitvalue2(): 5
电流输出:
rDigitvalue2(): 1234567
您编写的函数是:
void rdigitValue2(int num, int k, int *result)
{
if (k != 1) {
rdigitValue2(num / 10, k - 1, result);
*result = num;
}
else {
*result = num % 10;
}
}
上述函数在我的g++编译器中运行良好。函数末尾的*result的值是1234567,因为递归调用以*result=num行结尾。
您需要删除此行并将函数修改为:
void rdigitValue2(int num, int k, int *result)
{
if (k != 1) {
rdigitValue2(num / 10, k - 1, result);
}
else {
*result = num % 10;
}
}
输出:rDigitvalue2():5
预期输出:
rDigitvalue2(): 5
电流输出:
rDigitvalue2(): 1234567
您编写的函数是:
void rdigitValue2(int num, int k, int *result)
{
if (k != 1) {
rdigitValue2(num / 10, k - 1, result);
*result = num;
}
else {
*result = num % 10;
}
}
上述函数在我的g++编译器中运行良好。函数末尾的*result的值是1234567,因为递归调用以*result=num行结尾。
您需要删除此行并将函数修改为:
void rdigitValue2(int num, int k, int *result)
{
if (k != 1) {
rdigitValue2(num / 10, k - 1, result);
}
else {
*result = num % 10;
}
}
输出:
rDigitvalue2():5
那么我应该如何修复它?另外,您认为我的逻辑正确吗?递归调用应该有k-1
作为参数。不幸的是,它仍然在没有响应时崩溃,那么我应该如何修复它?另外,您认为我的逻辑正确吗?递归调用应该有k-1
作为参数。不幸的是,它仍然在没有响应时崩溃,那么我应该如何修复它?另外,您认为我的逻辑正确吗?递归调用应该有k-1
作为参数。不幸的是,它仍然在没有响应时崩溃,那么我应该如何修复它?另外,你认为我的逻辑正确吗?递归调用应该有k-1
作为参数。不幸的是,它仍然崩溃,因为没有响应,但我认为k是永远不应该递减的位置参数?这就是为什么我初始化了另一个变量计数来跟踪循环?@Denise,num中的第三个位置等于num/10中的第二个位置。您可以放弃count
变量,只需测试k!=1
。当您将k
从3减为1时,您将把num除以10两次,因此num将12345
,这意味着num%10
将计算为5。您好,很抱歉问另一个问题。假设我要为上面的问题更改为指针,我将代码修改为修改部分。然而,程序本身再次崩溃。有什么想法吗?@Denise认为代码本身不应该崩溃,但它被破坏了,因为行*result=num
,这意味着您总是只返回num
,而不是正确的值。只是删除那一行来修正它。但我认为k是位置参数,永远不应该递减?这就是为什么我初始化了另一个变量计数来跟踪循环?@Denise,num中的第三个位置等于num/10中的第二个位置。您可以放弃count
变量,只需测试k!=1
。当您将k
从3减为1时,您将把num除以10两次,因此num将12345
,这意味着num%10
将计算为5。您好,很抱歉问另一个问题。假设我要为上面的问题更改为指针,我将代码修改为修改部分。然而,程序本身再次崩溃。有什么想法吗?@Denise这段代码本身不应该崩溃,但是因为l