→ tonyhcc:我的想法是當 n=1 只有兩種情0和1 n=2 就是遞迴去呼叫09/26 03:53
→ tonyhcc:n=1 的情形加以組合09/26 03:54
tony大的方式我有想過
#include <stdio.h>
#include <stdlib.h>
void recursive(char *ch, int n, int i, char bit);
int count = 0;
int main()
{
char *ch;
int n;
scanf("%d", &n);
ch = (char* )malloc(sizeof(char)*n);
recursive(ch, n, n, '0');
recursive(ch, n, n, '1');
printf("%d\n", count);
return 0 ;
}
void recursive(char *str, int n, int i, char bit)
{
if ( i == 0)
{
printf("%s\n", str);
count++;
}
else
{
*(str +n-i) = bit;
recursive(str, n, i-1, '0');
recursive(str, n, i-1, '1');
}
}
這樣有兩個問題(或三個)
第一個
當要印出來的時候else裡有兩個recursive的呼叫
所以每一種結果都會印兩次
我不知道怎麼修掉=.=
再來的問題就是
遞迴的精神不就是main裡面叫一次遞迴就可以直接解決問題的嗎?
我用了兩次(0、1)
好像不對......
另外一個問題就是我怕老師會說我這不是用排列的
而是用產生的
下個禮拜還要去問助教可不可以...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.232.63.167
→ cutecpu:不過突然發現, malloc size 應該等於 sizeof(char)*n+1 09/26 11:07
→ cutecpu:然後記得補 0 => ch[n]=0; 09/26 11:08
→ reon:用shift 可以嗎 XD 09/26 13:13
→ liu2007:不懂,為什麼size會 = n+1 ?? 另外ch[n] = '0'要加在哪 09/26 13:43
→ liu2007:裡呢? 09/26 13:43