递归思想学习归纳

递归思想学习归纳

要使用递归首先得满足两个条件
所要解决的问题是由多个相同的步骤重复即可解决的(相同规律)
有结束的明显点

范例

  1. 求和 1-100 的和

分析

重复第一项和第二项相加到最后一项n
到n为一的时候结束
function sum(n) {
  if (n == 1) return 1
  return sum(n - 1) + n
}

可以尝试较小的n测试自己的递推式是否正确,可以反向用n+1实现

2.斐波拉契数列 0,1,2,3,5,8,13,21,34,55,89…求第 n 项

分析

第一项和第二项得到第三项 每一项都是重复此规律
n为一或n为2的时候的时候结束,1、2单独分析
function fib(n) {
  if (n === 1 || n === 2) return n - 1
  return fib(n - 1) + fib(n - 2)
}
  1. 爬楼梯(这个最明显)
    假如楼梯有 n 个台阶,每次可以走 1 个或 2 个台阶,请问走完这 n 个台阶有几种走法
function climbStairs(n) {
  if (n == 1) return 1
  if (n == 2) return 2
  return climbStairs(n - 1) + climbStairs(n - 2)
}

分析

****自己思考哟我就是看见这块有理解的,不懂可以留言

4.数组反转问题

正常解决思路:
两个指针首位调换

递归思路:
重复调换动作
找到停止调换的标志位

var fruits = ["Banana", "Orange", "Apple", "Mango"];
function myFunction(){
	this.revers(fruits);
	var x=document.getElementById("demo");
	x.innerHTML=fruits;
}
function revers(tem){
	let start = 0;
	let end = tem.length-1;
	this.repeat(start ,end)
}
function repeat(start ,end){
	let temParm = "";
	temParm = fruits[start];
	fruits[start] = fruits[end];
	fruits[end] = temParm;
	start++;
	end--;
	if(end <= start){
	   return;
	   }
	return repeat(start ,end)
}

参考文章: https://juejin.cn/post/6844904014207795214

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值