在C ++中使用递归方法反转整数

时间:2015-06-16 01:15:17

标签: c++ recursion

我有这个递归函数来反转一个正整数。任何人都有一个有效的算法来使用较少的递归调用来执行任务(但仍然使用递归),请在此处发布!

int countDigit (const int & _X) {
    if (_X < 10)
        return 1;
    return (countDigit(_X / 10) + 1);
}

int getPower (const int & _X, const int & _Y) {
    if (_Y == 0)
       return 1;
    int ans = getPower(_X, _Y / 2);
    if (_Y % 2)
       return _X * ans * ans;
    return ans * ans;
 }

 int reverseDigit (const int & digit)  {
    if (digit < 10) {
      return digit;
    }
    int num = (digit % 10) * getPower(10, countDigit(digit / 10));
    return num + reverseDigit(digit / 10);
 }

2 个答案:

答案 0 :(得分:1)

当然......有效地从数字中读取数字并将它们添加到临时数字的末尾:

  

编辑:基于提问者对问题的奇怪修改(要求递归),我编辑了我的干净迭代解决方案,包括任意数量的递归,由正整数[recurse]表示。

int reverseDigit(int digit, int recurse=1) {
    if (recurse>0) reverseDigit(digit,recurse-1);

    int num=0;
    while (digit!=0) {
        num*=10;
        num+=digit%10;
        digit/=10;
    }
    return num;
}

答案 1 :(得分:0)

这是递归的

var btn = document.getElementsByTagName("button")[0];
var inpt = document.getElementsByName("post")[0];

btn.onclick = function () {
    if (!inpt.value) alert("Please enter something to post.");

    if (inpt.value.length < 10) {
        alert("Post must be at least 10 characters.");
        return false;
    } else {

    } 

    var tbl = document.getElementsByTagName("table")[0];
    var row = tbl.insertRow(0);
    var cell = row.insertCell(0);
    var txt = document.createTextNode(inpt.value);
    cell.appendChild(txt);
    tbl.insertRow(0);
    tbl.insertRow(0);

    inpt.value = "";
     $('#text_counter').text(150);

};

$(document).ready(function(){
    var left = 150
    $('#text_counter').text(left);

        $('#status').keyup(function () {

        left = 150 - $(this).val().length;

        if(left < 0){
            $('#text_counter').addClass("overlimit");
        }
        if(left >= 0){
            $('#text_counter').removeClass("overlimit");
        }

        $('#text_counter').text('Characters left: ' + left);
    });
});

您可以通过(545146548)示例

来调用它
void reverse(int number, int& result)
{
if (number == 0) return;
else
   {
    result *= 10;
    result += number % 10; 
    reverse(number / 10, result ); 
   }
}