【蓝桥云课】递推和递归

一、递推连分式开根号

问题描述:计算2\sqrt{2}2

(2+1)(2−1)=(2)2−12=2−1=1(\sqrt{2}+1)(\sqrt{2}-1)=(\sqrt{2})^2-1^2=2-1=1(2+1)(21)=(2)212=21=1

由此得到2−1=11+2=11+1+2−1=12+2−1\sqrt{2}-1=\frac{1}{1+\sqrt{2}}=\frac{1}{1+1+\sqrt{2}-1}=\frac{1}{2+\sqrt{2}-1}21=1+21=1+1+211=2+211

x=2−1x=\sqrt{2}-1x=21,由上式可得x=12+xx=\frac{1}{2+x}x=2+x1

由此递推可得x=12+12+12+12+....x=\frac{1}{2+\frac{1}{2+\frac{1}{2+\frac{1}{2+....}}}}x=2+2+2+2+....1111

程序代码:

public class SqrtDitui {

	public static void main(String[] args) {
		System.out.println(Math.sqrt(2));
		double ans=0;
		for(int i=1;i<=100;i++) ans=1.0/(2+ans);//x=1/(2+x)
		System.out.println(ans+1);
	}
}

运行结果:

1.4142135623730951
1.4142135623730951
二、递归汉诺塔

问题描述:现有A、B、C三根柱子,A柱子套着n个圆盘,且大的圆盘放在下面,从大到小往上叠放。现在需要将圆盘套到C柱子上,规则是:大圆盘不能压着小圆盘,最终效果为保持原有顺序,一次只能移动一个圆盘。问如何以最少的次数移动完成?

程序代码:

import java.util.Scanner;

public class HanNuoTaDigui {
	
	public static int step=1;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			int n = sc.nextInt();
			step = 1;
			hannuota(n,'A','B','C');
		}
	}
	
	public static void hannuota(int n, char A, char B,char C) {
		if(n==1)  System.out.printf("第%03d步,将%03d盘子%c->%c\n",step++,n,A,C);
		else {
			hannuota(n-1,A,C,B);//前n-1个移动到B盘,为n空出位置方便从A移动到C
			System.out.printf("第%03d步,将%03d盘子%c->%c\n",step++,n,A,C);
			hannuota(n-1,B,A,C);//完成所有n个到C盘
		}
	}
}

运行结果:

3
第001步,将001盘子A->C
第002步,将002盘子A->B
第003步,将001盘子C->B
第004步,将003盘子A->C
第005步,将001盘子B->A
第006步,将002盘子B->C
第007步,将001盘子A->C
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CS_木成河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值