【Java编程基本功】(七)输出菱形、递归算法。

85 篇文章 0 订阅
82 篇文章 0 订阅

###第二十题

打印出如下图案
(行数为奇数n的菱形)
就是下面这个样子哒~

*
***
*****
*******
*****
***
*
public class Lianxi20 {
 public static void main(String[] args) {    
   int h=7,w=7;
   for(int i=0;i<(h+1)/2;i++){
     for(int j=0;j<w/2-i;j++){
       System.out.print(" ");
     }
     for(int k=1;k<(i+1)*2;k++){
       System.out.print("*");
     }
     System.out.println();
   }
   for(int i=1;i<=h/2;i++){
     for(int j=1;j<=i;j++){
       System.out.print(" ");
     }
     for(int k=1;k<=w-i*2;k++){
       System.out.print("*");
     }
     System.out.println();
   }    
 }
}

###第二十一题

有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。

代码:

public class lianxi20 {
 public static void main(String[] args) {
   double sum=0.0;
   int x=2,y=1,t;
   for(int i=1;i<=20;i++){
     sum = sum+(double)x/y;
     t=y;
     y=x;
     x=y+t;      
   }
   System.out.println(sum);
 }
}

下面是第二种方式,用递归的方法:因为分子,分母的规律就是斐波那契数列呀~

代码:

public class lianxi23 {
 public static void main(String[] args) {
   double sum=0.0;
   for(int i=2;i<=21;i++){
     sum = sum+(double)f(i+1)/f(i);
     System.out.println(f(i+1)+"/"+f(i));      
   }
   System.out.println(sum);
 }
 public static int f(int a){
   if(a==1||a==2){
     return 1;
   }else{
     return f(a-1)+f(a-2);
   }
 }
}

###第二十二题

利用递归方法求n!(如n=5,则求出5!)。

代码:

public class lianxi22 {
 public static void main(String[] args) {
   Scanner in = new Scanner(System.in);
   int n = in.nextInt();
   System.out.println(Recursion(n));
   
 }
 public static int Recursion(int n){
   if(n==1||n==0){
     return 1;
   }else{
     return n*Recursion(n-1);
   }
 }
}

###第二十三题

有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,
说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

代码:

public class lianxi23 {
 public static void main(String[] args) {
   int n = 5;    
   System.out.println(f(5));
 }
 public static int f(int n ){
   if(n==1) {
     return 10;  
   }else{
     return 2+f(n-1);
   }
 }
}

一看这架势,我妥妥的想到了用递归,写下了如上的代码写完了还很得意然后~我就发现其实这个题是可以用更简单的 for 循环来做的~

果然我是用递归用出惯性了,不知道伙伴们是不是也有这种时候,好不容易写完了代码,抬头一看,隔壁的小哥哥,不仅把题做出来了,而且逻辑还是超简单的~

代码:

public class lianxi25 {
 public static void main(String[] args) {
   int sum = 10;
   for(int i=1;i<5;i++){
     sum=sum+2;
   }
   System.out.println(sum);
 }
}

我走过最多的路,某过于出题老师的套路。写代码不仅要防bug,还要提防出题老师的险恶用心我的心好累呀

想学习Java的小伙伴注意啦!我整理了一套从最基础的Java入门级学习到Java框架内容,送给每一位想要学习Java的小伙伴,想要获取资料,可以关注微信公众号“速学Java”哦,这里是小白聚集地,欢迎初学和进阶中的小伙伴~

关注微信公众号:速学Java

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值