请看以下递归函数:
public static int mystery(int a,int b)
{
if (b0) return 0;
if (b%20) return mysetery(a+a,b/2);
return mystery(a+a,b/2)+a;
}
mystery(2,25)和mystery(3,11)的返回值是多少?给定正整数a和b,mystery(a,b)计算的结果是什么?将代码中的+替换为*并将return 0改为return 1,然后回答相同的问题。
代码
public class Main {
public static int mystery(int a, int b){
if (b==0) return 0;
if (b % 2 == 0) return mystery(a+a,b/2);
return mystery(a+a,b/2)+a;
}
public static void main(String[] args) {
System.out.println(mystery(3,32));
System.out.println(mystery(3,11));
}
}
答案
96
33
即a*b
代码
public class Main {
public static int mystery(int a, int b){
if (b==0) return 1;
if (b % 2 == 0) return mystery(a*a,b/2);
return mystery(a*a,b/2)*a;
}
public static void main(String[] args) {
System.out.println(mystery(2,25));
System.out.println(mystery(3,11));
}
}
答案:
33554432
177147
即a^b
知识点-递归
编写递归代码最重要的有三点
- 递归总有一个最简单的情况—方法的第一条语句总是一个包含return的条件语句.
- 递归调用总是尝试解决一个规模更小的子问题,这样递归才能收敛到最简单的情况.
- 递归调用的父问题和尝试解决的子问题之间不应该有交集.
手写参考修电脑的龙生的思路,不过到了*我就不太会了
返回目录