javascript递归函数
<scriptlanguage="javascript">functionsum(n){if(n==1){return1;//疑问在这里,他这是最终,为什么返回的不是1而...
<script language="javascript">
function sum(n)
{
if(n==1)
{
return 1;//疑问在这里,他这是最终,为什么返回的不是1而是5050,改成true也行,为什么换成false结果就成了5049了
}
else
{
return n+sum(n-1)
}
}
alert(sum(100))
</script> 展开
function sum(n)
{
if(n==1)
{
return 1;//疑问在这里,他这是最终,为什么返回的不是1而是5050,改成true也行,为什么换成false结果就成了5049了
}
else
{
return n+sum(n-1)
}
}
alert(sum(100))
</script> 展开
2个回答
展开全部
因为递归是一层层请求下去,而数据是一层层返回上来:
第一百次:1
第九十九:2+1(第一百次返回的数据)
第九十八:3+(2+1)(第九十九次返回的数据)
。。。
第一次:100+4950(第二次返回的数据)
为什么TRUE可以呢?
因为true会被隐性转换为1,而false会被隐性转换为0。
递归就相当于调用了100次那个sum函数,这是很耗内存资源的;
一般可以用循环体实现的就尽量用循环体来实现,如上题目就可以改为下面的方式实现:
function sum(n){
var total = 0;
do{
total+=n;
}while(n--)
return total;
}
第一百次:1
第九十九:2+1(第一百次返回的数据)
第九十八:3+(2+1)(第九十九次返回的数据)
。。。
第一次:100+4950(第二次返回的数据)
为什么TRUE可以呢?
因为true会被隐性转换为1,而false会被隐性转换为0。
递归就相当于调用了100次那个sum函数,这是很耗内存资源的;
一般可以用循环体实现的就尽量用循环体来实现,如上题目就可以改为下面的方式实现:
function sum(n){
var total = 0;
do{
total+=n;
}while(n--)
return total;
}
展开全部
应该已经明了递归的概念了吧?本例中相当于调用了100次sum,第一次是sum(100),运行进sum后,发现n不等于1,则会执行n + sum(n - 1),对100来说就是100 + sum(99),于是又会调用sum(99),之后是sum(98)....直到sum(1),不再调用sum,直接返回1,总体效果就是:
100 + (99 + (98 + ( .... + (1) ))),1-100的等差数列之和
100 + (99 + (98 + ( .... + (1) ))),1-100的等差数列之和
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询