通过整数递归搜索

时间:2015-09-19 01:11:22

标签: c if-statement recursion

我在尝试在C编程中进行递归时遇到了一些问题。这是预期的输出:

$text = '<tag>Hey1</tag> Blah Blah <tag>Hey2</tag>';

preg_match_all('#(<tag>.*?</tag>)#is', $text, $matches);

echo '<pre>' . print_r($matches[1], true) . '</pre>';

这是我的代码:

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

3 个答案:

答案 0 :(得分:2)

你的堆栈溢出!你永远不会减少数字位置并保持循环。您当前的代码可以简化为:

int rdigitValue1(int num, int k)
{
    if (k != 0) {
        rdigitValue1(num / 10, k);
    }
}

答案 1 :(得分:1)

您应该使用k - 1进行递归调用,继续测试是否k == 0,当然它永远不会,因为您继续使用k的相同值。您还需要存储递归调用返回的值,以便您可以返回它:

output = rdigitValue1(num / 10, k - 1);

答案 2 :(得分:0)

预期产出:

    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

相关问题