[Java] 面向对象练习(三)——递归方法

习题一:

利用递归计算5个数的和

代码:

public class yyds {
    public static void main(String[] args) {
        yyds y = new yyds();
        System.out.println(y.digui(5));
        }
        public int digui(int n){
        if(n == 1){
            return 1;
        }else{
            return n + digui(n - 1);
       }
     }
   }

习题二:

利用递归计算5个数的乘积

代码:

public class yyds {
    public static void main(String[] args) {
        yyds y = new yyds();
        System.out.println(y.digui(3));
        }
        public int digui(int n){
        if(n == 1){
            return 1;
        }else{
            return n * digui(n - 1);
       }
     }
   }

习题三:

已知有一个数列,f(0) = 1,f(1) =  4;f(n + 2) = 2 * f(n + 1) + f(n);其中n是大于0的整数,求f(10)的值

代码:

public class yyds {
    public static void main(String[] args) {
        yyds y = new yyds();
        System.out.println(y.digui(10));
        }
        public int digui(int n){
        if(n == 0){
            return 1;
        }else if( n == 1){
            return 4;
        }else{
            return 2 * digui(n - 1) + digui(n - 2);
        }
      }
   }

解析:

① 一定要注意不写死循环,如果按照题目那样两边移位后求f(n),会导致每递归一次,数据就偏离0和1更远一次。递归更多的是n - m的格式。

习题四:

输入一个数据n,计算斐波那契数列的第n个值:1,1,2,3,5,8,13,21,34,55。

规律:一个数等于前两个数之和;要求:计算斐波那契数列的第n个值,并将整个数列打印出来。

代码:

import java.util.Scanner;

public class yyds {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        yyds y = new yyds();
        System.out.println("斐波那契的个数:");
        int n = in.nextInt();
        for(int i = 1;i <= n;i++){
            System.out.print(y.f(i) + " ");
        }
    }
        public int f(int n){
        //必须要有n == 0时的情况,因为else情况中可以有f(0)。如果此处不写n == 0的情况,则会溢出
        if(n == 0){
            return 0;
        }else if(n == 1){
            return 1;
        }else{
            return f(n - 1) + f(n - 2);
        }
       }
     }

回顾:

① 一定要代入数据,看一下递归的最小变量是0还是1,确定好下限。

习题五:

汉诺塔问题:如下图所示,从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移动一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数。

解析:

轻松理解汉诺塔问题(图解java描述)_视学算法的博客-CSDN博客_汉诺塔问题javahttps://blog.csdn.net/zandaoguang/article/details/76889284?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165284071916782395340929%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165284071916782395340929&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-76889284-null-null.142%5Ev10%5Econtrol,157%5Ev4%5Econtrol&utm_term=%E6%B1%89%E8%AF%BA%E5%A1%94java&spm=1018.2226.3001.4187

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值