01/10/2018, 10:57

Thắc mắc về đệ quy, mong được giải đáp

Chào mọi người , mình đang học về đệ quy và đang tìm hiểu về đệ quy phi tuyến tính , có một bài tập mình không hiểu về cách mà hàm trả lại kết quả , đề bài như thế này


Đây là code

#include <iostream>

using namespace std;
float sum(int n)
{
    if(n<=0)
        return 0;
    return (float)n/(n+1) + sum(n-1);
}
int main()
{
   int n = 0;
   cout << "Nhap n : ";
   cin >> n;
   float kq = sum(n);
   cout << kq;
}

Mình có debug thử nhưng vẫn chưa thông suốt lắm , Mình đang thắc mắc là không biết khi hàm trả về chương trình sẽ hoạt động như thế này , có phải là (float)n/(n+1) tương đương với 1/2, 2/3 … ? , vậy thì sum(n-1) nó thuộc về đâu ? và khi trả về nó sẽ tính toán như thế nào , mong các bạn giải đáp giúp mình.

Trần Hoàn viết 13:05 ngày 01/10/2018

sum(5)
= 5/6 + 4/5 + 3/4 + 2/3 + 1/2
= 5/6 + sum(4)

Và nếu tính chi tiết thì sẽ là

5/6 + sum(4)
= 5/6 + 4/5 + sum(3)
= 5/6 + 4/5 + 3/4 + sum(2)
= 5/6 + 4/5 + 3/4 + 2/3 + sum(1)
= 5/6 + 4/5 + 3/4 + 2/3 + 1/2 + sum(0)
= 5/6 + 4/5 + 3/4 + 2/3 + 1/2 + 0              vì if(n<=0) return 0;
Hoài Nam Trương viết 13:11 ngày 01/10/2018

có phải 5/6 + sum(4) => sum(4) là 4 thằng 4/5 + 3/4 + 2/3 + 1/2 phải không bạn ?

Hoài Nam Trương viết 13:00 ngày 01/10/2018

ok bạn, mình hiểu rồi, cảm ơn bạn nha .

Bài liên quan
0