我在尝试在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
答案 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