私は電子ブックEloquent Javascriptに従って、JavaScriptを学んでいます。第4章では、再帰関数を使用してリストのn番目の値にアクセスするのは困難です。私はちょうどそれを行うために再帰関数を書いていますが、正しい値にアクセスすることはできますが、何らかの不満の理由でそれを返すことはできません。なぜこの再帰関数は値を返さない
本で使用されるリストの定義が普遍的であるかどうかはわかりませんので、ここで説明します。基本的に各list要素は、値と次のリスト要素の両方を保持します。それは何らかの始まりのようなものです。ここに例があります。
list = {
value: 1,
rest: {
value: 2,
rest: {
value 3,
rest: null
}
}
}
ここに問題があります。
function arrayToList(array){
var list = {rest:null};
for(var i = array.length-1; i>=0;i--){
list = {
value:array[i],
rest:list
}
}
return list;
}
/*
function nth(list, element){
for(var i = 0;i < element;i++){
list = list.rest;
}
return list.value;
}
*/
function nth(list, index){
console.log(index);
if(index < 1){
console.log("Success", list.value);
return list.value;
}
else {
console.log("Fail");
list = list.rest;
index--;
//console.log(index);
nth(list,index);
}
}
console.log(nth(arrayToList([10, 20, 30]), 1));
// → 20
コメントアウトされたn番目の関数は、本が望むものを行いますが、再帰的ではありません。また、デバッグ用に余分なものが2つあります(console.log()
)。ご覧のように、「成功」と値を記録すると、正しい値が記録されます。しかし、直後に同じ値を返すと、未定義が返されます。
関数値を返すことを忘れてしまったことは、私たちが何十回も答えたことです。私は何らかの理由で重複した参照を見つけられません。 – Prune
私は尋ねない限り、それが私の問題であることをどのように知っていたでしょうか?問題の内容がわからないと、その問題に対する答えを探すことができません。 – Supetorus