【递归】今天看这么一个问题,就是传入一个数组和数字,将数组中的所有关于5的倍数的数字替换为新数字,函数头和运行示例已经给出,请问这个用递归怎么写呢?**不能使用循环结构**
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);
}
递归算法,关键是找到区分递归结束的条件和继续调用自身的条件,需要定义两个方法,一个是递归的,另一个是判断最终是否数组无 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);
}
要求有点变态,而且是强行为递归而递归。
能不能用全局变量?