Java递归调用测试小demo

本文通过一个简单的Java递归调用示例解释了递归的概念,如计算阶乘和斐波那契数列。递归在达到特定条件时停止,例如在斐波那契数列中,当达到指定位置时返回相应的数值。递归调用在处理这类问题时非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 递归简单点说就是方法调用自己本身。直到满足某一条件退出方法。 下来结合一个小例子来说明其用途

package feilong.day1221;
import java.util.Scanner;
/**
 * 递归调用 求阶乘
 * 5=5*4*3*2*1=120
 * @author Nanfeilong
 */
public class Diguidiaoyong_jiecheng {
    public static void main(String[] args) {
        System.out.println("输入整数求阶乘:");
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        System.out.println(multiply(a));
        scanner.close();
    }
    public static long multiply(int b) {
        if(b<=0)  return 1;//程序出口
        else   return b*multiply(b-1);//multiply(b-1) 调用本身
    }

}

如果输入的是5的话,那么结果就等于 5*4*3*2*1=120

  • 如果还不明白的话我们在来看一个例子,
package feilong.day1221;

import java.util.Scanner;

/**
 * 递归调用 (a)1+2+3+4...100
 * @author Nanfeilong
 */
public class Diguidiaoyong {
    public static void main(String[] args) {
        System.out.println("求和从输入的数加到100");
        int a = new Scanner(System.in).nextInt();
        System.out.println(addnum(a));
    }
    public static int addnum(int num){
        if(num==100)   return 1;//程序出口
        else   return num+addnum(num+1);//addnum(num+1) 调用本身
    }
}

例如输入98 那么结果就是98+99+1=198 为什么呢,

因为当等于100时返回的是1

  • 斐波那契数列就是后面的一个数是前面两个数的之和
/**
 * 递归使用斐波那契数列
 * @author Nanfeilong
 *
 */
package feilong.day1221;

import java.util.Scanner;


public class Test1 {
    public static void main(String[] args) {
        /*
         * 斐波那契数列
         * 1  1  2  3  5  8  13  21   34   55  89  144...
         */
        System.out.println("求第几个斐波那契数列?");
        int n = new Scanner(System.in).nextInt();
        long r = g(n);
        long f = f(n);
        System.out.println("斐波那契数列的第"+n+"个数是:"+f);
        System.out.println(r);
    }

    private static long g(int n) {
        long a = 1;
        long b = 1;
        for(int i = 3; i<=n; i++){
            b=a+b;
            a=b-a;
            System.out.println("===========");
            System.out.println(b);
            System.out.println(a);
        }
        return b;
    }

    private static long f(int n) {
        if(n==1||n==2) {
            return 1;
        }
        return f(n-1)+f(n-2);
    }
}

求第几个斐波那契数列?
5

2
1

3
2

5
3
斐波那契数列的第5个数是:5
5

### 解决 PP-OCRv4 出现的错误 当遇到 `WARNING: The pretrained params backbone.blocks2.0.dw_conv.lab.scale not in model` 这样的警告时,这通常意味着预训练模型中的某些参数未能匹配到当前配置下的模型结构中[^2]。 对于此问题的一个有效解决方案是采用特定配置文件来适配预训练权重。具体操作方法如下: 通过指定配置文件 `ch_PP-OCRv4_det_student.yml` 并利用已有的最佳精度预训练模型 (`best_accuracy`) 来启动训练过程可以绕过上述不兼容的问题。执行命令如下所示: ```bash python3 tools/train.py -c configs/det/ch_PP-OCRv4/ch_PP-OCRv4_det_student.yml ``` 该方案不仅解决了参数缺失带来的警告,还能够继续基于高质量的预训练成果进行微调,从而提升最终检测效果。 关于蒸馏的概念,在机器学习领域内指的是将大型复杂网络(teacher 模型)的知识迁移到小型简单网络(student 模型)。这里 student 和 teacher 的关系是指两个不同规模或架构的神经网络之间的指导与被指导的关系;其中 teacher 已经经过充分训练并具有良好的性能,而 student 则试图模仿前者的行为模式以达到相似的效果但保持更高效的计算特性。 至于提到的 `Traceback` 错误信息部分,由于未提供具体的跟踪堆栈详情,难以给出针对性建议。不过一般而言,这报错往往涉及代码逻辑错误或是环境配置不当等问题。为了更好地帮助定位和解决问题,推荐记录完整的异常日志,并仔细检查最近修改过的代码片段以及确认依赖库版本的一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值