let i = 0 function laoHeShang(){ i++ console.log(i+'从前有座山,山里有座庙,庙里有个老和尚,老和尚对小和尚说,从前有座山,山里有座庙,庙里有个老和尚,老和尚对小和尚说...') if(i < 10){ laoHeShang() } } laoHeShang()
概念:即自己调用自己,先执行一次,再调用自己,把这种情况称之为递归
=>它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
=>函数先执行一次,再调用自己,相当于函数没有执行完毕,一直在执行,所以递归相当于循环类似
注意点:递归必须有一个结束条件,要不然会形成死循环。
用递归求斐波拉契数列:
求Fibonacci的第n个数 1 1 2 3 5 8 13 21...(该数列中,有n个数字,从第三个数字开始:数值 =前一个数字 + 前面一个数字)即,n=(n-2)+(n-1)function fb(n){ if(n==1 || n==2){ return 1 } return fb(n-2) + fb(n-1) } var res = fb(7) console.log(res)