递归小例子

public void print(int  w) {
       int  i;
       if ( w!=0) {
      print(w-1);
             for(i=1;i<=w;++i)
                  System.out.print(w);
             System.out.println();
       }
}

//计算累加
public  int add(int i) {
 int total;
 if(i == 1)
  total = i;
 else
  total = add(i - 1)+i;
 return total;
}

//1,1,2,3,5,8,13
public int jisuan(int num) {
 if(num < 3)
  return 1;
 else
  return jisuan(num - 1) + jisuan(num - 2);
}

 

//递归就是自己在特定的情况下自己调用自己的过程
//三个方法各有特点,大家好好理解
//递归主要注意两点,1)什么时候结束递归,怎么递归

 

 

在 Java 中,递归是一种常见的编程技术,指的是一个方法直接或间接调用自身。递归适用于可以分解为多个子问题的场景,每个子问题的解决方式与原问题相同或相似。以下是几个简单的递归方法示例。 ### 阶乘计算 阶乘是递归的经典示例之一。阶乘的定义是 `n! = n * (n-1)!`,其中 `1! = 1` 是基线条件。 ```java public static int factorial(int n) { if (n == 1) { return 1; // 基线条件 } else { return n * factorial(n - 1); // 递归调用 } } ``` ### 累加求和 递归也可以用于求解 `1 + 2 + 3 + ... + n` 的和。该问题可以分解为 `n + sum(n-1)`,其中 `sum(1)` 的值为 `1`。 ```java public static int sum(int n) { if (n == 1) { return 1; // 基线条件 } else { return n + sum(n - 1); // 递归调用 } } ``` ### 字符串反向输出 递归可以用于反向输出字符串的每个字符。通过递归进入字符串的末尾,再逐层返回并输出字符。 ```java public static void reverse(int n, String str) { if (n == str.length()) { return; // 基线条件 } reverse(n + 1, str); // 递归调用 System.out.print(str.charAt(n)); // 逐层输出字符 } ``` ### 递归的实现原理 递归的执行过程涉及**进栈**和**出栈**操作。每次递归调用,程序会将当前状态压入调用栈中,直到满足基线条件后,再逐层返回并执行栈顶的操作。递归的深度受限于 JVM 的栈空间,因此递归深度过大会导致栈溢出(`StackOverflowError`)。 ### 相关问题 递归编程需要注意以下几点: 1. **基线条件**:递归必须包含一个或多个基线条件,以防止无限递归。 2. **递归深度**:递归调用的次数不能过多,否则会导致栈溢出。 3. **性能优化**:某些递归问题可以通过**尾递归优化**或**迭代**方式提升性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值