跪求递归思路 如何设计递归算法思路 最好附上代码

condlover 2011-10-21 09:27:32
输入: 6
输出:如下
6
5+1
4+2, 4+1+1
3+3, 3+2+1, 3+1+1+1
2+2+2, 2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1+1
...全文
330 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
miqing1985 2012-03-19
  • 打赏
  • 举报
回复
最近在学习,顶一下
JackBurd 2012-03-17
  • 打赏
  • 举报
回复
楼上写的不错,程序清晰简洁,我想了半天没想出来。
condlover 2012-03-17
  • 打赏
  • 举报
回复
自己再顶下 。。。
深度抽象 2011-10-24
  • 打赏
  • 举报
回复
dfs一般搜索而已
ai_ya_ya 2011-10-24
  • 打赏
  • 举报
回复
学习 大牛的思路
QWER_ASDFASDF 2011-10-24
  • 打赏
  • 举报
回复
收藏~学习
测试NULL 2011-10-24
  • 打赏
  • 举报
回复
收藏一下
failuer 2011-10-24
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

void func(int N, int table[], int cnt)
{
int i;

if (N <= 0)
{
if (0 == N)
{
for (i = 0; i < cnt - 1; ++i)
{
printf("%d+", table[i]);
}
printf("%d\n", table[cnt - 1]);
}
}
else
{
for (i = N; i >= 1; --i)
{
if (i <= table[cnt - 1])
{
table[cnt] = i;
func(N - i, table, cnt + 1);
}
}
}
}

int main()
{
int n;
int *table;

printf("%s\n", "输入n值大小:");
scanf("%d", &n);

if (NULL == (table = (int *)malloc((n + 1) * sizeof(int))))
{
exit(1);
}
table[0] = n;
func(n, table + 1, 0);

free(table);

system("pause");
return 0;
}

xibeitianlang 2011-10-21
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>

void combination(const char s[],int m,int n)
{
int i;
char t[30];
for(i=n;i>=m;i--)
{
if(!strcmp(s,"")) sprintf(t,"%d",i);
else sprintf(t,"%d+%s",i,s);
combination(t,i,n-i);
}
if(!n) printf("%s\n",s);
}
int main()
{
combination("",1,6);
getchar();
}
xibeitianlang 2011-10-21
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>

void combination(const char s[],int m,int n)
{
int i;
char t[30];
for(i=n;i>=m;i--)
{
sprintf(t,"%d+%s",i,s);
combination(t,i,n-i);
}
if(!n)
{
printf("%s\n",s);
}
}
int main()
{
combination("",1,6);
getchar();
}

调试了半天也没把尾巴上'+'去掉:(
liu_chengwu 2011-10-21
  • 打赏
  • 举报
回复
首先有一个收敛条件x==1时是一个结束的确定值
然后每一次输入数都会减少直到收敛到x==1的确定值
long f(long x){
if(x==1)return 1;
retur x*f(x-1);

}
condlover 2011-10-21
  • 打赏
  • 举报
回复
能否有C语言 我们没学Pascal
xibeitianlang 2011-10-21
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
procedure combination(const s:string; m,n:integer);
var
i: integer;
begin
for i:=n downto m do combination(IntToStr(i)+','+s,i,n-i);
if n=0 then Memo1.Lines.Add(copy(s,1,Length(s)-1));
end;
begin
combination('',1,6);
end;
结果是:
6
3+3
4+2
2+2+2
5+1
3+2+1
4+1+1
2+2+1+1
3+1+1+1
2+1+1+1+1
1+1+1+1+1+1
csalp 2011-10-21
  • 打赏
  • 举报
回复
这个是数的拆分,你看看组合数学就知道了

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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