我是javascript或任何其他编程语言的初学者。我已设法制作一个脚本来总结数字中的数字。
function sumDigits(number){
var number = Math.floor(Math.random() * 100) + 1;
var result = number.toString().split("");
var last = eval(result.join('+'));
return last;
}
document.write(sumDigits());
如何使用递归函数执行此操作,我也是递归术语的新手。
答案 0 :(得分:1)
小提琴:http://jsfiddle.net/Hu3Gk/
function sumDigits(number) {
var remainder = number % 10;
var sum = remainder;
if(number >= 10) {
var rest = Math.floor(number / 10);
sum += sumDigits(rest);
}
return sum;
}
答案 1 :(得分:1)
可能有一个更优雅的解决方案,但这应该可以解决问题。
function sumDigits(number) {
// defaul the sum to 0
var sum = 0;
// split the number into its individual digits
var numbers = number.toString().split("");
// check if there are still digits in the number
while(numbers.length > 0) {
// add the next number (numbers[0]) to the sum
sum += parseInt(numbers[0], 10);
// remove the number that was just added to sum
numbers.splice(0, 1);
// invoke sumDigits passing the new number
// (the previous number excluding the first digit)
sumDigits(numbers.join(''));
}
// return the sum!
return sum;
}
答案 2 :(得分:0)
你不需要递归。尝试:
function sumNums(number){
var n = 0, num = number.toString().split('');
for(var i in num){
n += +num[i];
}
return n;
}
console.log(sumNums(125));
答案 3 :(得分:0)
“递归”函数是一个调用自身的函数,直到你告诉它停止为止。这是一个简单的例子:
奥利奥饼干塔配方:
您将需要:
1奥利奥饼干塔(可选)
1奥利奥饼干
路线:
整个想法是你可以根据需要多次重复这个食谱,你的饼干塔会变得像你想要的一样大。
在该示例中,“可选”一词将奥利奥饼干塔成分转换为您可能看到的另一个短语。如果你曾经看过“逃避条件”一词,那就是它所指的。
递归执行此操作的最佳方法是使用辅助函数。喜欢这个
function sumDigitsHelper(result){
// check to see if result is empty here. If it is, return 0.
// grab the first number from result here and store it in a variable called "first"
// grab the rest of the array here and store it in a variable called "rest"
// return first + sumDigitsHelper(rest)
}
function sumDigits(number){
var number = Math.floor(Math.random() * 100) + 1;
var result = number.toString().split("");
// I'll leave this commented so you can remember what it does
// var last = eval(result.join('+'));
return sumDigitsHelper(number);
}
只需用代码替换我的评论。
答案 4 :(得分:0)
function sumDigits(n){
return n == 0 ? 0 : n % 10 + sumDigits(Math.floor(n/10));
}
答案 5 :(得分:0)
另一种方法是将数字最初转换为函数内的数组。
然后,每次在第一个元素上添加array[0]
和slice
。
function sumDigits (num) {
let array = String(num).split("").map(Number);
if (array.length === 0) {
return 0;
}
else {
return array[0] + sumDigits(array.slice(1).join(""));
}
}
console.log(sumDigits(679));
注意,您必须在.join("")
之后添加slice(1)
,以便第二次将 string 传递给函数,而不是数组。
否则,您将传入[6, ',', 7]
,它映射到号码[6, NaN, 7]
,然后超出调用堆栈。