Thắc mắc trong đáp án của tam giác pascal

Dòng:

return pascal(k, n - 1) + pascal(k - 1, n - 1);

Ở dòng này ví dụ j=3, n=4 thì 2 cái hàm pascal đó sẽ là (2;3) và (3;3) thì lấy giá trị Ở VỊ TRÍ j2 và j3 ở dòng 3 cộng với nhau thì sao nó lại ra giá trị số nguyên ạ? đây là 2 hàm pascal () + vs nhau chứ đâu phải là 2 giá trị Ở VỊ TRÍ j2 và j3 cộng vs nhau đâu mà nó ra bằng 3 ạ. Em nghĩ thế, Mọi người giải thích với ạ.
Em cảm ơn!.
image

  
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

int pascal(int k, int n) {
	if (k == 0 || k == n) {
		return 1;
	}
	else {
		return pascal(k, n - 1) + pascal(k - 1, n - 1);
	}
}

int main() {
	int n;
	cout << "Nhap n:";
	cin >> n;

	for (size_t i = 0; i <= n; i++)
	{
		for (size_t k = 0; k <= i; k++)
		{
			cout << setw(6) << pascal(k, i);
		}
		cout << endl;
	}
	
	return 0;
}

Bạn chưa hiểu về đệ quy!
Mọi giá trị đều từ dòng return 1; cộng dồn mà ra.

7 Likes

Bạn chịu khó nói ngắn gọn dùm mình cái quy trình cộng dồn mà ra được giá trị đó được không ạ?
Mình thấy lú cái cộng dồn cực kỳ

Trước đó mình cũng có suy nghĩ là cộng dồn cái return 1 mà mình nghĩ nó khong được

Do gọi 2 hàm đệ quy nên số nhánh rẽ sẽ rất phức tạp, khó mà trình bày hết được. Bạn hiểu đơn giản là số ngọn (nhánh cuối cùng) là kết quả.
Dòng bạn thắc mắc thì đó chính là phép toán cơ bản của tam giác pascal, có gốc là số 1.
Ví dụ bạn đưa:

k = 3
n = 4

(3,4)=(2,3)+(3,3).
Thế mỗi giá trị của (2, 3)(3, 3) từ đâu ra?
Nó là:
(2,3)=(1,2)+(2,2)
(3,3)=1 (k == n) (1) <==
Phân tích tiếp:
(1,2)=(0,1)+(1,1)=1+(1,1)=1+1 (k == 0 || k == n) (2) <==
(2,2)=1 (k == n) (3) <==

Từ (1), (2) và (3):
(3,4)=1+1+1+1=4

Lưu ý: (3,4) là cột 4 của dòng 5 (chỉ số từ 0). Lúc nãy mình cũng nhầm là cột 3 của dòng 4.

6 Likes

Wow chi tiết quá, em cảm ơn rất nhiêu ạ!! :sunny:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?