js递归函数的算法题

1、求1-100求和?递归
1.1 顺序思路

let sum=0;//定义总数值
function getTotal(n){
   sum+=n;
   n++;
   if(n>100){
       console.log('1-100求和的结果为:',sum);
       return sum;
   }else{
       return getTotal(n);
   }
}
getTotal(1);//执行函数 
//1-100递归求和的结果为: 5050

1.2 比较精简(由1.1的顺序思路而精简的)

//1.2.1
function add(n){
	if(n==1)return 1;
	return add(n-1)+n;
}
let sum=add(100);
console.log('1-100求和的结果为:',sum);
//1.2.2
function add2(n){
	if(n==100)return 100;
	return add(n+1)+n;
}
let sum2=add2(100);
console.log('1-100求和的结果为:',sum2);

1.3 for循环,迭代的方式

let sum=0;
for(let i=1;i<=100;i++){
	sum+=i;
}
console.log('1-100求和的结果为:',sum);

2、求1,3,5,7,…第n项和前n项和

function getN(n){//先求出第n项
	if(n==1)return 1;
	return getN(n-1)+2;
}
function sum(n){
	if(n==1)return 1;
	return getN(n)+sum(n-1);
}

3、斐波那契数列求第n项?(后一项为前两项的和)
斐波那契指的是这样一个数列:1、1、2、3、5、8、13、21、34…在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*);随着数列项数的增加,前一项与后一项之比越来越逼近黄金分割的数值0.6180339887……

function fib(n){//n>=2
	if(n==1 || n==2)return 1;
	return fib(n-1)+fib(n-2);
}
console.log('斐波那契数列的第4项',fib(4));//3

5、求1-n的阶乘?

function foo(n){
	if(n==1)return 1;
	return f00(n-1)*n;
}

6、求n的m幂次方?

function foo(n,m){
	if(m==1) return n;
	return foo(n,m-1)*n;
}

7、深拷贝

function deepClone(obj){
	 const objectMap =new Map();
	 //多次递归会造成,超出最大调用堆栈大小
	 const _deepClone=(value)=>{
	 	const type=typeof value;
	 	if(type!=='object'||type===null){
	 		return value;//基本数据类型,直接return
	 	}
	 	if(objectMap.has(value)){//避免造成溢出
	 		return objectMap.get(value);
	 	}
	 	const result=Array.isArray(value)?[]:{};
	 	objectMap.set(value,result);//避免造成溢出
	 	for(const key in value){
	 		result[key]=_deepClone(value[key]);
	 	}
	 	return result;
	 }
	 return _deepClone(obj);
}
let obj={a:1,b:2};
obj.c=obj;
console.log(deepClone(obj));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值