使用递归性javascript从数字中添加数字
Adding digits from a number, using recursivity - javascript
我是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());
如何使用递归函数来实现这一点,我也是递归这个术语的新手。
Fiddle: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;
}
可能有一个更优雅的解决方案,但这应该能解决问题。
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;
}
http://jsfiddle.net/6RRbd/4/
您不需要递归。尝试:
function sumNums(number){
var n = 0, num = number.toString().split('');
for(var i in num){
n += +num[i];
}
return n;
}
console.log(sumNums(125));
"递归"函数是一个在您通知它停止之前一直调用自己的函数。这里有一个快速的例子:
奥利奥饼干塔配方:
您将需要:
1奥利奥饼干塔(可选)
1奥利奥饼干
方向:
- 如果你有一个奥利奥饼干塔,把上面的巧克力饼干片拿出来吃
- 如果你有一个奥利奥饼干塔,从奥利奥饼干上取下顶部的巧克力饼干片,然后吃
- 如果你有奥利奥饼干塔,将奥利奥饼干塔内暴露的奶油表面放在奥利奥饼干的暴露奶油表面上
整个想法是,你可以随心所欲地重复这个食谱,你的饼干塔就会变得像你想要的那样大。
在这个例子中,"可选"一词将奥利奥饼干塔的成分变成了你可能见过的另一个短语。如果你曾经见过"逃逸条件"这个词,那就是它所指的
递归执行此操作的最佳方法是使用helper函数。像这个
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);
}
只需将我的评论替换为代码。
function sumDigits(n){
return n == 0 ? 0 : n % 10 + sumDigits(Math.floor(n/10));
}
另一种方法是将数字转换为数组,最初在函数中。
然后,每次将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));
注意必须在slice(1)
之后添加.join("")
,以便第二次将字符串而不是数组传递到函数中。
否则,您将传入[6, ',', 7]
,它映射到编号[6, NaN, 7]
,然后超过调用堆栈。
相关文章:
- 在 Javascript 不起作用的情况下为数字添加逗号
- 如何在 javascript 中为字符串中的数字添加下划线
- 将数字添加到文本框
- 使用javascript为网站的body标记中的所有数字添加一个span
- 如何在文本框vue.js上根据指定的数字添加行
- AngularJS如何获取一个数组,该数组将数字添加到函数中的元素,然后用另一个函数分散其注意力
- 使用 Jquery 为数字添加跨度
- 向数字添加百分之一位,该数字可以逗号或句点分隔
- 根据所选数字添加文本输入
- 将 JavaScript 数组中的 n 个数字添加到数组中的先前数字
- 有没有办法在不使用循环的情况下更新多个文档以将特定数字添加到一列
- 在javascript中自动为数字添加逗号
- Javascript:如何动态地将数字添加到变量名称中
- JQuery 获取链接并根据第 n 个数字添加变量
- 在 jquery 循环中将数字添加到运行总计
- 将字符串添加到数字,将数字添加到字符串
- 如何使用jquery将数字添加到输入ID名称中
- 我有一个javascript函数,可以将数字添加到数组中
- 如何在JS计数器中每3个数字添加一个冒号
- 只对大写字母和数字添加验证