2016-10-26 11 views
0

は、反復スキームでこれら2つの再帰プログラムを作成する際に助けが必要ですか? 私は再帰を行いましたが、両方の反復を作成することに固執しています。反復スキームプログラムto反復

質問1 - 再帰

(define mylength 
(lambda (l) 
    (cond 
    ((null? l) 0) 
    (else (+ 1 (mylength (cdr l))))))) 

質問1 - の繰り返し?

質問2 - 再帰

(define mylistref 
    (lambda (l index) 
    (cond 
    ((= index 0)(car l)) 
    (else 
     (mylistref (cdr l) (- index 1)))))) 

質問2 - の繰り返し?

+0

Schemeにはループを再帰させるだけなので、おそらく再帰的プロセスと反復プロセスを意味します。反復は末尾で呼び出されます。したがって再帰の再帰はwhoteの結果であり、再帰的な処理は結果と何かを行う必要があります。したがって、最初の例では、後で追加して再帰的に追加する必要があります。あなたの2番目のものはその後の作業がないので反復的なプロセスです。違いが分かりますか? – Sylwester

+0

[反復を証明付きで再帰する]の重複の可能性があります(http://stackoverflow.com/questions/40253790/recursion-to-iteration-with-proof) – Renzo

答えて

1

Schemeにはループ構造がないため、何らかの種類のデータ構造を横断している場合にのみ再帰を使用することができます。 You can read more about it here