我有这个递归函数来反转一个正整数。任何人都有一个有效的算法来使用较少的递归调用来执行任务(但仍然使用递归),请在此处发布!
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);
}
答案 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 );
}
}