Tính s(n) = sqrt(1 + sqrt(2 + sqrt (3 + ...sqrt (n-1 + sqrt (n))))) bằng đệ quy

Đề: tính s(n) = sqrt(1 + sqrt(2 + sqrt (3 + ...sqrt (n-1 + sqrt (n))))) bằng đệ quy
Mọi người giúp em sửa bài này đc ko ạ,em ra ko đúng kết quả,mà cũng ko hiểu bài này lắm.Mong mọi người sửa và giải thích giúp em.
Xin cám ơn.

#include<stdio.h>
#include<math.h>
double tong(int n)
{
	if(n==1) return 1;
	return (float)sqrt(n+tong(n-1));
}
int main()
{
	int n;
	printf("Nhap n: ");
	scanf("%d",&n);
	printf("Tong:%.2lf",tong(n));
}

Khi dừng đệ quy bạn return ra 1 và bạn show cái bạn return thì nó chả sai ~~
Bài này debug từng bước rồi xem cho hiểu nhé, gửi 1 câu nói rất hay của @noname00 :))

XIN ĐỪNG INB NHỜ DEBUG CODE KHI BẠN CHƯA DEBUG ĐẾN NÁT CẢ IDE.

Edit, hàm main chưa return

3 Likes

Mình chỉ search gg với cái title của bạn ra được solution luôn (bài 750)
http://kenhdaihoc.net/threads/tong-hop-giai-thuat-ham-de-quy.17867/
Còn đây là code mình vừa mới viết :slight_smile:

public class Exercises {
	public static void main(String[] args) {
		
		double res = sum(1, 3);
		System.out.println(res);
	}

	public static double sum(int i, int n) {
		if(i == n){
			return Math.sqrt(n);
		}

		return Math.sqrt(i + sum(i + 1, n));
	}
}

Hình minh họa kết quả nha :v


Bạn cứ chạy code ra giấy là vấn đề được giải quyết ngay ý mà (lưu ý: gặp một bài toán đừng nhảy vào code luôn mà hãy có sẵn một quyển vở để ghi ý tưởng đã sau mới implement tỷ lệ thành công sẽ cao hơn)

3 Likes

Đây là do thớt hiểu sai công thức thôi. Thay n = 3 là thấy toạch ngay: s’(n) = sqrt(3 + sqrt(2+sqrt(1)) != s(n) = sqrt(1+sqrt(2+sqrt(3))).

Viết xuôi cho ct đúng sẽ là for i:=n downto 1 do {s := 0} s := sqrt(i + s), phù hợp với đệ quy đuôi. Viết như bạn thì phải hai tham số.

2 Likes

mình chưa học Java nên nhìn ko biết gì cả

Nếu bạn suy nghĩ ra vấn đề thì implement bằng ngôn ngữ nào chả được :slight_smile:

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