如果10=1+9; 10=1+2+7; …… 如果1+9 和 9+1 被认为是同一个 那么对于10000,可以有多少种加法?
上次已经给出一种方法解决,虽然心里明白用递归最合理,但觉得一用递归大脑就迷糊,为了尽快找出答案就用了另外的方法。现在又用递归完成了。
总结的使用递归注意点:
1 明确输入
2 明确输出
3 明确递归调用终止的条件
在本题中,输入为ordNum和recurNum,输出为count, 终止条件是对recurNum分解时(recurNum=ordNum+(recurNum-ordNum)), 第一个加数超过了第二个加数。
代码如下:
class Recursion{
//count record sum of depart methods
static int count=0;
public static void depart(int ordNum,int recurNum){
//ordNum is the recursion number as the same time also one of the addends
//recurNum is the number int this time of recursion which shuld be departed
int left=recurNum-ordNum;
//only when ordNum<=left, we can decide this time it's successful to depart recurNum
if(ordNum<=left){
count++;
System.out.print(" +"+ordNum);
int newOrdNum=ordNum+1;
int newRecurNum=left;
depart(newOrdNum,newRecurNum);
}
//recursin end
else{
System.out.println(" +"+recurNum);
System.out.println("count="+count);
}
}
public static void main(String args[]){
System.out.print("10000 =");
depart(1,10000);
}
}
上次已经给出一种方法解决,虽然心里明白用递归最合理,但觉得一用递归大脑就迷糊,为了尽快找出答案就用了另外的方法。现在又用递归完成了。
总结的使用递归注意点:
1 明确输入
2 明确输出
3 明确递归调用终止的条件
在本题中,输入为ordNum和recurNum,输出为count, 终止条件是对recurNum分解时(recurNum=ordNum+(recurNum-ordNum)), 第一个加数超过了第二个加数。
代码如下:
class Recursion{
//count record sum of depart methods
static int count=0;
public static void depart(int ordNum,int recurNum){
//ordNum is the recursion number as the same time also one of the addends
//recurNum is the number int this time of recursion which shuld be departed
int left=recurNum-ordNum;
//only when ordNum<=left, we can decide this time it's successful to depart recurNum
if(ordNum<=left){
count++;
System.out.print(" +"+ordNum);
int newOrdNum=ordNum+1;
int newRecurNum=left;
depart(newOrdNum,newRecurNum);
}
//recursin end
else{
System.out.println(" +"+recurNum);
System.out.println("count="+count);
}
}
public static void main(String args[]){
System.out.print("10000 =");
depart(1,10000);
}
}