怎样递归实现一元钱的兑换方案

xingchen0906 2015-04-14 04:35:50
递归不太明白 只会用for循环和while做出来 递归弄不出来 求指点
...全文
200 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2015-04-16
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
仅供参考:
//求从Begin到End的正整数中挑出任意个数使其总和为Sum的所有方案
#include <stdio.h>
int Begin,End,Sum;
int j;
int o[1000];
long n;
void combsum(int b,int e,int s,int d) {
    int i;

    if (e>s) e=s;
    for (i=e;i>=b;i--) {
        if ((i+b)*(i-b+1)/2<s) break;
        o[d]=i;
        if (s-i<=0) {
            n++;
            printf("%8ld:",n);
            for (j=0;j<=d;j++) printf("%d ",o[j]);
            printf("\n");
        } else {
            if (d+1<1000) combsum(b,i-1,s-i,d+1);
            else {
                printf("Error:Too deep.\n");
                return;
            }
        }
    }
}
int main() {
    printf("Input Begin,End,Sum:");fflush(stdout);
    scanf("%d,%d,%d",&Begin,&End,&Sum);
    n=0L;
    combsum(Begin,End,Sum,0);
    printf("Total:%ld\n",n);
    return 0;
}
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

#include <stdio.h>
int list[256];
void split(int n , int m = 0)
{
	int i;
	if(n == 0)
	{
		for(i = 0 ; i < m ; ++i)
			printf("%d " ,list[i]);

		printf("\n");
		return ;
	}

	for(i = n ; i > 0 ; --i)
	{
		if(m == 0 || i <= list[m-1])
		{
			list[m] = i;
			split(n-i , m+1);
		}
	}
}

int main()
{
	int n;
	while(~scanf("%d" , &n))
	{
		split(n);
	}
	return 0;
}
anshiny 2015-04-15
  • 打赏
  • 举报
回复
没看明白题目意思。
xingchen0906 2015-04-15
  • 打赏
  • 举报
回复
引用 2 楼 zhangxiangDavaid 的回复:
比一元小的钱有哪些?
1角 2角 5角
QuickKeyBoard 2015-04-15
  • 打赏
  • 举报
回复
您连问题是啥都没说清楚……怕了你了……
苏叔叔 2015-04-14
  • 打赏
  • 举报
回复
比一元小的钱有哪些?
赵4老师 2015-04-14
  • 打赏
  • 举报
回复
仅供参考:
//求从Begin到End的正整数中挑出任意个数使其总和为Sum的所有方案
#include <stdio.h>
int Begin,End,Sum;
int j;
int o[1000];
long n;
void combsum(int b,int e,int s,int d) {
    int i;

    if (e>s) e=s;
    for (i=e;i>=b;i--) {
        if ((i+b)*(i-b+1)/2<s) break;
        o[d]=i;
        if (s-i<=0) {
            n++;
            printf("%8ld:",n);
            for (j=0;j<=d;j++) printf("%d ",o[j]);
            printf("\n");
        } else {
            if (d+1<1000) combsum(b,i-1,s-i,d+1);
            else {
                printf("Error:Too deep.\n");
                return;
            }
        }
    }
}
int main() {
    printf("Input Begin,End,Sum:");fflush(stdout);
    scanf("%d,%d,%d",&Begin,&End,&Sum);
    n=0L;
    combsum(Begin,End,Sum,0);
    printf("Total:%ld\n",n);
    return 0;
}
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧