با سلام خدمت تمامی دوستان عزیز سایت پی وی لرن .و کاربرانی که دوره کامل آموزش زبان C را دنبال می کنند. و کاربرانی که با سری آموزش های زبان C همراهمون هستند. امیدوارم تا این قسمت از آموزش از مطالب ارائه شده بهره لازم رو برده باشید. توابع بازگشتی در C ، محاسبه فاکتوریل به صورت بازگشتی در C و محاسبه سری فیبوناچی به صورت بازگشتی رو در ادامه خواهیم داشت.
توابع بازگشتی به توابعی که در داخل خودش، خودش را فراخوانی کند گفته می شود.
بعبارتی در زبان برنامه نویسی، اگر یک برنامه به شما اجازه دهد تا یک تابع را در همان تابع فراخوانی کنید،
آن را یک فراخوانی بازگشتی از تابع می نامیم.
1 2 3 4 5 6 7 | void recursion() { recursion(); /* function calls itself */ } int main() { recursion(); } |
زبان برنامه نویسی C تابع بازگشت را برای فراخوانی خودش پشتیبانی می کند. اما هنگام استفاده از بازگشت، برنامه نویسان باید مراقب باشند که شرایط خروج از برنامه را مشخص کنند،
در غیر این صورت به یک حلقه بی نهایت وارد می شوند.
توابع بازگشتی بسیار مفید برای حل بسیاری از مشکلات ریاضی هستند. مانند محاسبه فاکتوریل یک عدد، تولید سری فیبوناچی، و غیره.
به مثال زیر که با استفاده از تابع بازگشتی فاکتوریل یک عدد را محاسبه می کند توجه کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> unsigned long long int factorial(unsigned int i) { if(i <= 1) { return 1; } return i * factorial(i - 1); } int main() { int i = 12; printf("Factorial of %d is %d\n", i, factorial(i)); return 0; } |
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 | Factorial of 12 is 479001600 |
مثال زیر تولید سری فیبوناچی با استفاده از یک تابع بازگشتی برای یک عدد را نشان داده است. مثال را امتحان کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> int fibonacci(int i) { if(i == 0) { return 0; } if(i == 1) { return 1; } return fibonacci(i-1) + fibonacci(i-2); } int main() { int i; for (i = 0; i < 10; i++) { printf("%d\t\n", fibonacci(i)); } return 0; } |
زمانی که کد بالا کامپایل و اجرا شود، نتیجه زیر را تولید خواهد کرد:
1 2 3 4 5 6 7 8 9 10 | 0 1 1 2 3 5 8 13 21 34 |
مثالها را امتحان کنید.
این جلسه از آموزشها با توابع بازگشتی در C آغازشد. با محاسبه فاکتوریل به صورت بازگشتی در C ادامه دادیم. درنهایت با محاسبه سری فیبوناچی به صورت بازگشتی خاتمه دادیم.
جلسه بعد آرگومان های متغیر در زبان C را بررسی خواهیم کرد. موفق باشید.