দেখে মনে হচ্ছে যে কোনও পুনরাবৃত্ত পদ্ধতিটি পুচ্ছ-পুনরাবৃত্তিতে রূপান্তর করার জন্য আমি একটি সাধারণ উপায় পেয়েছি :
- অতিরিক্ত "ফলাফল" পরামিতি সহ কোনও সহায়ক উপ-পদ্ধতিটি সংজ্ঞায়িত করুন।
- সেই প্যারামিটারে পদ্ধতির রিটার্ন মানটিতে যা প্রয়োগ হবে তা প্রয়োগ করুন।
- শুরু করার জন্য এই সহায়িকার পদ্ধতিটি কল করুন। "ফলাফল" প্যারামিটারের প্রাথমিক মান হ'ল পুনরাবৃত্ত প্রক্রিয়াটির প্রস্থান পয়েন্টের মান, যাতে ফলাফল পুনরাবৃত্তি প্রক্রিয়াটি শুরু হয় যেখানে পুনরাবৃত্তি প্রক্রিয়াটি সঙ্কুচিত হওয়া শুরু করে।
উদাহরণস্বরূপ, রূপান্তরিত করার জন্য আসল পুনরাবৃত্তির পদ্ধতিটি এখানে রয়েছে ( এসআইসিপি অনুশীলন 1.17 ):
(define (fast-multiply a b)
(define (double num)
(* num 2))
(define (half num)
(/ num 2))
(cond ((= b 0) 0)
((even? b) (double (fast-multiply a (half b))))
(else (+ (fast-multiply a (- b 1)) a))))
এখানে রূপান্তরিত, পুচ্ছ-পুনরাবৃত্ত পদ্ধতি ( এসআইসিপি অনুশীলন 1.18 ):
(define (fast-multiply a b)
(define (double n)
(* n 2))
(define (half n)
(/ n 2))
(define (multi-iter a b product)
(cond ((= b 0) product)
((even? b) (multi-iter a (half b) (double product)))
(else (multi-iter a (- b 1) (+ product a)))))
(multi-iter a b 0))
কেউ কি এটি প্রমাণ বা অস্বীকার করতে পারেন?
b
একটি শক্তি হিসাবে নির্বাচন করা দেখায় যে প্রাথমিকভাবে product
0 তে সেট করা ঠিক ঠিক নয়; b
বিজোড় হওয়ার সাথে সাথে এটি 1 এ পরিবর্তন করা কার্যকর হয় না । হতে পারে আপনার জন্য 2 টি আলাদা সংগ্রহকারীর পরামিতি প্রয়োজন?