2012-01-16 49 views
4
的printf

我的教授问我做这件事:递归和用C

Input Number: 5 
+++++ 
+++++ 
+++++ 
+++++ 
+++++ 

我一直在努力地试图让THI;我继续以一个巨大的空白“+”结尾,并且“+”号为 。

你能帮我解决这个代码在C吗?

#include <stdio.h> 
#include <conio.h> 
int space(int space1) 
{ 
    if(space1 == 0) 
    { 
     return 1; 
    } 
    else 
    { 
     return printf("\n") && space(space1 - 1); 
    } 
} 
int visual(int plus) 
{ 
    if (plus == 0) 
    { 
     return 1; 
    } 
    else 
    { 
     return printf("+") && visual (plus - 1) && space(plus - 1); 
    } 
} 

int main() 
{ 
    int number; 
    printf("Please give the number\n"); 
    scanf("%d",&number); 
    visual(number); 
    getch(); 
} 

新的编辑;令我沮丧。它给了我5行+和一个大空间。

+0

结果应该是“+”的平方n x n,其中n是输入的数字?这种情况下不需要递归 – Vladimir 2012-01-16 08:06:06

+0

这个问题看起来很简单。我会建议使用调试器,并进入代码并理解程序在做什么。这将帮助您了解该程序如何执行。至于解决这个bug的指针,&&表示'AND' - C语言中的逻辑运算符,与linux shell不同,printf返回打印的字符数。 – 2012-01-16 08:08:04

+0

我的教授只会说在递归上做任何事情。 – JuanDelCarlos 2012-01-16 08:11:15

回答

0

完整的解决方案,而不循环更新:::

#include <stdio.h> 
#include <conio.h> 
int space(int space1) 
{ 
    if(space1 == 0) 
    { 
     return 1; 
    } 
    else 
    { 
     return printf("+") && space(space1 - 1); 
    } 
} 
int visual(int plus,int add) 
{ 
    if (plus == 0) 
    { 
     return 1; 
    } 
    else 
    { 
     space(add); 
     printf("\n"); 
     visual (plus - 1,add); 
    } 

} 

int main() 
{ 
    int number,i; 
    printf("Please give the number\n"); 
    scanf("%d",&number); 

    visual(number,number); 

    getch(); 
} 
+0

这很接近,但你并没有使用int空间。 – JuanDelCarlos 2012-01-16 08:27:41

+0

仍在循环。 -1 – andreadi 2012-01-16 08:35:26

+0

他对“唯一递归规则”非常严格。 – JuanDelCarlos 2012-01-16 08:36:42

2

检查本作的解决方案::

#include <stdio.h> 
#include <conio.h> 

int visual(int plus) 
{ 
    for(i=0;i<plus;i++) 
    { 
     for(j=0;j<plus;j++) 
     { 
      printf("+"); 
     } 
     printf("\n"); 
} 

int main() 
{ 
    int number; 
    printf("Please give the number\n"); 
    scanf("%d",&number); 
    visual(number); 
    getch(); 
} 
+0

这不使用递归 – duedl0r 2012-01-16 08:14:45

+0

我需要一个递归。 – JuanDelCarlos 2012-01-16 08:15:15

+0

正确...如果要使用递归,只需使用循环调用visual(number)并从视觉函数中移除第一个循环即可。 – Saif 2012-01-16 08:17:20

3

里面的递归函数中,如果(加上== 0)部分应打印\ n字符,然后使用一个循环来调用视频(号)数次。

如果你真的只想用递归来做,你还需要另一个递归函数。 一个递归函数会调用另一个函数,一个会打印“+++++ \ n”,另一个会调用这个函数x次产生x行。

function printpluses (int x){ 
    if (x==0){ 
     printf ("\n"); 
     return; 
    } 
    else { 
      printf ("+"); 
      printpluses (x-1); 
    } 
} 

和其它功能会

function printline (int x, int no_of_pluses){ 
     if (x==0){ 
      printf ("\n"); 
      return; 
     } 
     else{ 
      printpluses(no_of_pluses); 
      printline (x-1, no_of_pluses); 
     } 
    } 

可以使no_of_pluses全球化,所以哟不要沿着每个呼叫通过。

+0

只是关于第一个问题。在其他方面,你真的不得不使用“回报”。 – JuanDelCarlos 2012-01-16 08:39:08

+0

你真的想把所有东西都放在盘子上,我的错误是输入粗糙的代码。 – andreadi 2012-01-16 08:42:41

+0

不,不,不。我不想被喂食,只要给我一些线索。 – JuanDelCarlos 2012-01-16 08:43:23

0
#include <stdio.h> 
#include <conio.h> 

int number; 

int visual(int plus) 
{ 
    int i; 
    if (plus == 0) 
    { 
     return 1; 
    } 
    else 
    { 
     for(i=1;i<=number;i++) 
       printf("+"); 
     printf("\n"); 
     visual (plus - 1); 
    } 
} 

int main() 
{ 
    printf("Please give the number\n"); 
    scanf("%d",&number); 
    visual(number); 
    getch(); 
} 
+0

这项工作!谢谢,我会研究它。但是这个有循环。 – JuanDelCarlos 2012-01-16 08:21:45

+0

祝你好运哥们,你需要大量的学习!每个循环都可以表示为一个递归函数,这就是你的练习! – andreadi 2012-01-16 08:23:52

2
#include <stdio.h> 
#include <conio.h> 
int number; 
int visual(int plus) 
{ 
    if(plus % number == 0 && plus!=number*number) 
     printf("\n"); 
    if (plus == 0) 
    { 
     return 1; 
    } 
    else 
    { 
     printf("+"); 
     visual (plus - 1); 
    } 
} 

int main() 
{ 
    printf("Please give the number\n"); 
    scanf("%d",&number); 
    visual(number*number); 
    getch(); 
} 
0
#include <stdio.h> 
#include <conio.h> 

int number; 

int visual(int plus) 
{ 
    int i; 
    if (plus == 0) 
    { 
     return 1; 
    } 
    else 
    { 
     for(i=1;i<=number;i++) 
       printf("+"); 
     printf("\n"); 
     visual (plus - 1); 
    } 
} 

int main() 
{ 
    printf("Please give the number\n"); 
    scanf("%d",&number); 
    visual(number); 
    getch(); 
} 

这将帮助。