الگوریتم جمع ارقام یک عدد به روش بازگشتی به همراه کد پایتون

زمانی که از یک برنامه‌نویس پایتونی بخواهید یک تابع ساده بنویسد تا ارقام یک عدد را جمع کند و برگرداند، احتمالاً ابتدا عدد را به یک رشته تبدیل می‌کند و سپس رشته را به لیست (فهرست) و نهایتاً تک‌تک اعضای لیست را که ارقام عدد به صورت رشته‌های تک‌نویسه‌ای هستند به عدد تبدیل می‌کند و سپس آن‌ها را با هم جمع می‌کند. ولی الزاماً اولین روشی که برای حل مسئله به ذهن‌مان می‌رسد، بهترین روش نیست. در این مطلب یک الگوریتم برای جمع ارقام یک عدد صحیح به صورت بازگشتی به همراه کد پایتون آن ارائه می‌دهم.

الگوریتم

به عنوان مثال می‌خواهیم ارقام عدد ۱۲۳ را با هم جمع کنیم و به ۶ برسیم. اولین چیزی که ذهن می‌رسد این است که چطور تک‌تک ارقام را از عدد بیرون بکشیم. بعد از کمی فکر متوجه می‌شویم که اگر باقی‌ماندهٔ تقسیم عدد بر ۱۰ را به دست آوریم، در واقع رقم یکان که ۳ باشد را به دست آورده‌ایم. حال اگر عدد ۱۲۳ را به ۱۰ تقسیم کنیم و تنها قسمت صحیح آن را نگه داریم (یا در زبان‌هایی که از تقسیم صحیح پشتیبانی می‌کنند، یک تقسیم صحیح انجام دهیم)، رقم‌های بعدی یعنی ۱۲ به دست می‌آید. حال با تکرار این فرایند تا زمانی که به عددی کوچک‌تر از ۱۰ برسیم، می‌توانیم یکان‌های جدا شده در هر دور را با هم جمع کنیم و مثلا برای ۱۲۳ به نتیجه ۶ برسیم.

کد پایتون

def digit_sum(a: int, b: int=0) -> int:
    if a < 10:
        return a + b
    return digit_sum(a//10, a%10+b)

این تابع دو ورودی a و b می‌گیرد. ورودی b نباید توسط کاربر داده شود و تنها برای استفاده توسط خود تابع است برای زمانی که خودش را صدا می‌زند. با قرار دادن یک جمله print در ابتدای تابع و اجرای تابع برای اعداد مختلف می‌توانید طرز کار تابع را تماشا کنید.

با تشکر از محمد‌صالح کامیاب بابت ویراستاری.