遞歸
1.什么叫做遞歸
答:當前函數(shù)自己調用自己谓着,要理解遞歸或颊,廢話不多說秘蛇,直接看一道面試題
需求:求1~100之間,不能被3整除的整數(shù)的和
function sum(n) {
if(n==0){ //如果傳進來的值是0,說明累加到頭了碉克。無需繼續(xù)累加凌唬,返回為0即可。沒有再次執(zhí)行條件漏麦,停止執(zhí)行了客税。
return 0;
}
if(n%3==0){ //如果傳進來的值能被3整除,我們不需要累加撕贞,直接讓值減一更耻,即sum(n-1),因為有sum(n-1)這個條件繼續(xù)傳入到sum函數(shù),繼續(xù)執(zhí)行
return sum(n-1);
}
return n+sum(n-1); //用當前值n和下一個值sum(n-1)進行累加捏膨,有再次執(zhí)行的條件秧均,再次傳入sum函數(shù),繼續(xù)執(zhí)行
}
var total = sum(100); //執(zhí)行函數(shù)号涯,傳入實參目胡,把值賦值給total;
console.log(total);
結果為 3367;此結果正確
- 說明:此面試題我是用遞歸做的链快,一個函數(shù)自己調用自己讶隐。其實面試官也是想要這種方法(用if或者while等判斷也可),相信大家看這個實例久又,應該對遞歸有了大致了解吧巫延。
2.定時器和遞歸
我們先用setInerval寫一個循環(huán)輸出的例子
var count = 0;
var timer = null;
clearInterval(timer);
timer = setInterval(function () {
count++;
console.log(count);
if(count==10){
clearInterval(timer);
}
},1000);
結果為 1,2地消,3炉峰,4澄阳,5掘殴,6捎拯,7善玫,8恤批,9耘沼,10
用setTimeout實現(xiàn)輪詢功能(仿setInterval)
var count = 0;
var timer = null;
function move() {
count++;
console.log(count);
if(count==10){return;} //每一次執(zhí)行move方法帜讲,都會創(chuàng)建一個新的定時器溺森,導致很多定時器累積巫橄,占內存淘邻,所以在新創(chuàng)建定時器之前,我們應該清楚定時器湘换;
clearTimeout(timer);
timer = setTimeout(move,1000);
}
move();
結果為 1宾舅,2统阿,3,4筹我,5扶平,6,7蔬蕊,8结澄,9,10
對于前端來說岸夯,我們相對于后臺使用遞歸并沒有那么soEasy麻献,但是這種重要的思想,我們還是要去嘗試的囱修。