首页 > 解决方案 > 递归回文函数中的访问冲突写入位置?

问题描述

不久前我开始学习 C++,并试图编写一个递归函数来确定一个整数是否是回文数(即 12421 应该返回 true,而 123 应该返回 false)。我可以迭代地做到这一点,但给定的任务是使用递归,并且使用一个只需要一个输入的函数——这里命名为 test。唉,为此我不允许修改函数以接受更多输入,否则肯定会更容易。

这是我到目前为止的代码,我不知道为什么它不起作用。我在这里尝试的方法是取整数,找到它的长度以及第一个和最后一个数字,然后递归地将测试值放回函数中,“删除”第一个和最后一个数字,以便继续比较直到我达到了基本情况(test==0)。临时变量......相当尴尬,但我不知道如何在不修改原始输入的情况下使用它。

当我在 Visual Studio 中运行它时,它会在第二行显示一条消息:“ispalindrome.exe 中 0x002D0C99 处抛出异常:0xC0000005:访问冲突写入位置 0x00600F3C。” 为什么会这样?任何帮助将不胜感激。

 bool is_palindrome(int test)
{
    int length = 1, firstDigit, lastDigit;
    int temp = test;
    int temp2 = test;
    int temp3 = test;
    while (temp > 0)
    {
        temp /= 10;
        length++;
    }
    
    while (temp2 >= 10)
    {
        temp2 /= 10;
    }
    firstDigit = temp2;
    lastDigit = temp3 % 10;

    if (test==0)
        return firstDigit == lastDigit;
    else
    {
        is_palindrome(test-(firstDigit*length)-lastDigit);
    }
}

标签: c++functionrecursionaccess-violation

解决方案


推荐阅读