求助,不知道用C语言递归编的n个布尔变量的真值组合的程序错在哪了?

廖WJ 2013-04-25 10:30:07

#include<stdio.h>
#include<string.h>
void Ture(int a[],int i,int n);//求a[i]到a[n]的真值
int main()
{
int n;
int a[100];
while(scanf("%d",&n)!=EOF)//输入布尔变量的个数
{
memset(a,0,sizeof(int)*n);//初始化为0
Ture(a,0,n-1);
}
return 0;
}
void Ture(int a[],int i,int n)
{
int j;
if(i==n+1)
{
printf("<");
for(j=0;j<=n;j++)
{
if(a[j])
printf("ture");
else
printf("false");
if(j!=n)
printf(",");
}
printf(">\n");
}
else
{
Ture(a,i+1,n);
a[i]=1;
Ture(a,i+1,n);
}
}
...全文
196 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
FancyMouse 2013-04-26
  • 打赏
  • 举报
回复

        a[i]=0;
        Ture(a,i+1,n);
        a[i]=1;
        Ture(a,i+1,n);
mujiok2003 2013-04-26
  • 打赏
  • 举报
回复
引用 3 楼 u010240510 的回复:
[quote=引用 1 楼 Gonefar 的回复:]

 //       Ture(a,i+1,n); 只要一个递归就好了。。
明显不行吧,这样输出就只有全部是“ture”一种情况了.[/quote] 你要干嘛?
mujiok2003 2013-04-26
  • 打赏
  • 举报
回复
单词true
mujiok2003 2013-04-26
  • 打赏
  • 举报
回复
引用 5 楼 mujiok2003 的回复:
memset(a,0,sizeof(int)*100); //memset(a,0,sizeof(int)*n);//初始化为0
忽略
常如意 2013-04-26
  • 打赏
  • 举报
回复
memset(a,0,sizeof(int)*n); 改为 memset(a,0,sizeof(int)*100);
mujiok2003 2013-04-26
  • 打赏
  • 举报
回复
memset(a,0,sizeof(int)*100); //memset(a,0,sizeof(int)*n);//初始化为0
廖WJ 2013-04-26
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
谢谢,请问是在VC的窗口按Alt+7键吗?我不会调试程序,平时都是依靠在程序执行时打印出需要知道的变量的值的方法,
廖WJ 2013-04-26
  • 打赏
  • 举报
回复
引用 1 楼 Gonefar 的回复:

 //       Ture(a,i+1,n); 只要一个递归就好了。。
明显不行吧,这样输出就只有全部是“ture”一种情况了.
赵4老师 2013-04-26
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
Gonefar 2013-04-26
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>
void Ture(int a[],int i,int n);//求a[i]到a[n]的真值
int main()
{
int n;
int a[100];
while(scanf("%d",&n)!=EOF)//输入布尔变量的个数
{
memset(a,0,sizeof(int)*n);//初始化为0
Ture(a,0,n-1);
}
return 0;
}
void Ture(int a[],int i,int n)
{
int j;
if(i==n+1)
{
printf("<");
for(j=0;j<=n;j++)
{
if(a[j])
printf("ture");
else
printf("false");
if(j!=n)
printf(",");
}
printf(">\n");
}
else
{
// Ture(a,i+1,n); 只要一个递归就好了。。
a[i]=1;
Ture(a,i+1,n);
}
}
Gonefar 2013-04-26
  • 打赏
  • 举报
回复
引用 4 楼 u010240510 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:]
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!

谢谢,请问是在VC的窗口按Alt+7键吗?我不会调试程序,平时都是依靠在程序执行时打印出需要知道的变量的值的方法,[/quote]
递归时你全赋值1了,当然为全true

69,375

社区成员

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

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