算法
迭代算法
-
从一道算法问题反思迭代算法
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?
感谢大佬分享练习题
在这道题中我们需要实现的是每次调用函数去求解上一次和上上一次之和,那么如果使用
for
循环是可以实现的,但是语句会相对复杂定义一个方法动态调用自身
private static int fun(int n){ if (n == 1 || n == 2){ return 1; } return fun(n - 1) + fun(n - 2); }
自己写的时候会很容易忘记边界条件 n 为 1 和 2 时的情况,同时也有可能写多个调用自身的语句,这样极有可能会弄混,还有就是在关键的地方
return
合适的值 -
自己练习写的 输入任意一个数字,返回比此数字大的一个质数
private static int upToPimeNumber(int num){ boolean flag = true; num++; for (int i = 2; i <= num / 2; i++){ if (num % i == 0) { flag = false; break; } } if (flag == false){ return upToPirmeNumber(num++); } return num; }
在编写此方法时,有几个错误
- 忘记边界条件,当 num 为 1或者一个质数直接输入时,会导致flag一直为true, 返回了本身,所以应该直接num++;
- 在调用自身时,应该时return一个自身方法,如果不使用return关键字,会导致最后面的return起作用,导致num不是最后算出来的,而是中间某一步骤的值