一个有关C 的编程问题!!!
发布网友
发布时间:2024-10-16 18:42
我来回答
共1个回答
热心网友
时间:2024-12-13 10:22
递归解释:
1.if(y==1) return 1; 小于等于x的自然数的和为y=1,显然只有1一种方法
2.if(x==1) return 1; 表示只能用1来求和为x,方法数肯定是只有1个,就是x个1的和
3.if(y<x) return f(y,y);不超过x的自然数表示的和为y,y小于x,显然和中的任何一个数都不能大于y,否则就超了,所以实际上只用到了不超过y的自然数来求和,自然是f(y,y)
4.if(x==y) return 1+f(y,x-1); x=y时候可以用y=x来表示是一种,其他情况的和的每个加数都应该小于x,也就是不超过x-1的数,即f(y,x-1)
5.return f(y,x-1)+f(y-x,x); 这种情况实际就是y>x的情况。可以全部用不超过x-1的数(不用x)来表示和,个数为f(y,x-1)。或者至少用一个x来求和,那么剩下的y-x个数就是f(y-x,x)
我这只是给你提供了一种思考的角度,具体你可以按我的介绍去想。也就是通过讨论不同的情况,把问题逐渐降低维度,另外还有终止条件,如这里的1,2.这样递归就能结束。追问5.return f(y,x-1)+f(y-x,x); 这种情况实际就是y>x的情况。可以全部用不超过x-1的数(不用x)来表示和,个数为f(y,x-1)。或者至少用一个x来求和,那么剩下的y-x个数就是f(y-x,x)
不好意思,这种情况前半部分懂了,后半部分还是不太懂,“剩下的y-x个数”是什么意思?
追答我说的可能不太清楚,不是剩下的y-x个数,是和要为y,现在我已经选了一个加数x,这样跟前面的情况肯定不一样。那么剩下的加数的和就应该为y-x,对吧。剩下的y-x依然要由不超过x的数的和来得到,方法数就是f(y-x,x)
不清楚再问吧