Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 整数递归搜索_C_If Statement_Recursion - Fatal编程技术网

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);

我在尝试用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);
        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