這是我在一次面試的時候被問到的,而且要求在簡歷背面寫出來就漾,當著面試官的面寫,我的小心臟哦念搬,我震驚的原因有兩個抑堡。
1.這種需求為什么要用遞歸
2.手寫代碼,我去朗徊,當初就是因為寫字不好才對計算機感興趣首妖。
這種機會自然要抓住了,有目的的練習(xí)更有動力爷恳,練一次多熟練一次
第一種
let count = 0,j=10;
function add(j){
if(j > 1){
count += j;
add(--j);
}
}
上述有些取巧有缆,避開一個遞歸的難點,不用外界的count
不用外界的count
function add(j){
if(j>1){
return j+add(--j);
}
else{
return 1;
}
}
let count = add(10);
j+add(--j) 我還是想了許久温亲,路漫漫啊棚壁。
尾遞歸版本
function add(count,j){
if(j>1){
return add(count+j,--j);
}
else{
return count+j;
}
}
let count = add(0,10);
遞歸最主要的兩點,第一找到重復(fù)的邏輯和進行重復(fù)邏輯的條件栈虚,第二找到終止的條件袖外,這里重復(fù)的邏輯是前一個加上比他小1的一個數(shù)。
其實也可以倒過來魂务,一個數(shù)加上比他大1的一個數(shù)
不知道大家怎么看待手寫代碼這種事曼验,我是真的頭疼泌射。