丶xiaoHai
2020-07-16 23:44
采纳率: 96.8%
浏览 193

关于Java递归遍历数组的问题

图片说明

【递归】今天看这么一个问题,就是传入一个数组和数字,将数组中的所有关于5的倍数的数字替换为新数字,函数头和运行示例已经给出,请问这个用递归怎么写呢?**不能使用循环结构**

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • storm_huang 2020-07-17 09:09
    已采纳
    public void replaceMutili5(int [] array, int number) {
          replace(0, array, number);
     }
     //递归遍历,index自增
     private void replace(int index, int[] array, int number){
        if(index >= array.length)
            return;
        if(array[index] % 5 == 0)
            array[index] = number;
        replace(++index, array, number);
     }
    
    打赏 评论
  • 毕小宝 2020-07-17 07:16

    递归算法,关键是找到区分递归结束的条件和继续调用自身的条件,需要定义两个方法,一个是递归的,另一个是判断最终是否数组无 5 的倍数了。伪代码:

    public boolean isNoFiveTimes(int[] arrray) {
      for(int i=0;i<array.length;i++){
            if(array[i]%5==0){
                     // 存在,则继续替换
                        return false;
                }
        }
        // 没有了,可以结束递归的条件
        return true;
    }
    
    

    再写递归算法:

     public void replaceMutili5(int [] array, int number) {
          // 是否能结束递归
                if(isNoFiveTimes(array)){
                    return;
                }
    
                // 替换
                for(int i=0;i<array[i];i++) {
                    if(array[i] %5==0){
                            array[i] = number;
                        }
                }
    
                // 递归
                replaceMutili5(array,number);
     }
    
    打赏 评论
  • 一丝混乱 2020-07-17 13:06

    要求有点变态,而且是强行为递归而递归。

    能不能用全局变量?

    打赏 评论

相关推荐 更多相似问题