首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大神,小弟想了很久了,一个递归

2013-11-09 
求助大神,小弟想了很久了,一个递归.1.编写一个函数,要求产生如下所示的输出(用递归) This is written by c

求助大神,小弟想了很久了,一个递归.
1.编写一个函数,要求产生如下所示的输出(用递归)
 This is written by call number 1
  This is written by call number 2
   This is written by call number 3
    This is written by call number 4
    This is written by call number 4
   This is written by call number 3
  This is written by call number 2
 This is written by call number 1 递归 c++
[解决办法]


# include <stdio.h>

// print space n times
void print_space(int n)
{
    int i;
    for (i = 0; i < n; i++)
        putchar(' ');
}

// print msg with leading spaces and level
void print(const char * msg, int level)
{
    print_space(level);
    printf("%s ", msg);
    printf("%d\n", level);
}

void foo(const char * msg, int level, int max_level)
{
    print(msg, level);
    if (level < max_level)
        foo(msg, level + 1, max_level);
    print(msg, level);
}

int main()
{
    const char * MSG = "This is written by call number";
    foo(MSG, 1, 4);

    return 0;
}

[解决办法]
3楼代码可改成一个函数:
# include <stdio.h>
void foo(const char * msg, int level, int max_level)
{
    printf("%*c%s %d\n", level, ' ', msg, level);
    if (level < max_level)
        foo(msg, level + 1, max_level);
    printf("%*c%s %d\n", level, ' ', msg, level);
}

int main()
{
    const char * MSG = "This is written by call number";
    foo(MSG, 1, 4);

    return 0;
}

[解决办法]
引用:

# include <stdio.h>

// print space n times
void print_space(int n)
{
    int i;
    for (i = 0; i < n; i++)
        putchar(' ');
}

// print msg with leading spaces and level
void print(const char * msg, int level)
{
    print_space(level);
    printf("%s ", msg);
    printf("%d\n", level);
}

void foo(const char * msg, int level, int max_level)
{
    print(msg, level);
    if (level < max_level)
        foo(msg, level + 1, max_level);
    print(msg, level);
}

int main()
{
    const char * MSG = "This is written by call number";
    foo(MSG, 1, 4);

    return 0;
}

这位兄弟写得很漂亮,个人认为,最符合你的要求。
我从另一个角度写的:分开成2部分递归。
#include <stdio.h>

void do_print(const char *s, int depth)
{
int i;

for (i = 0; i < depth; i++)
putchar(' ');
printf("%s %d\n", s, depth);
}

void do_depth(const char *s, int depth)
{
if (depth == 1) do_print(s, depth);

if (depth > 1) {
do_depth(s, depth-1);
do_print(s, depth);
}
}

void do_depth2(const char *s, int depth, int limit)
{
if (depth == limit) do_print(s, depth);

if (depth < limit) {


do_depth2(s, depth+1, limit);
do_print(s, depth);
}
}

void depth_print(const char *s, int limit)
{
do_depth(s, limit);
do_depth2(s, 1, limit);
}


int main(void)
{
const char *msg = "This is written by call number";

depth_print(msg, 4);

getch();
return 0;
}


[解决办法]
直接把print和print_space在foo中inline展开不就行了?
[解决办法]
引用:
谢谢楼上各位,不过他要求只有一个函数,这就有点纠结了


把楼上的函数丢在一个函数里面就好了!或者 宏定义都是可以的!
[解决办法]
没那么复杂;

上代码:


#include "stdlib.h"

void foo( int nLev, int nMaxLev )
{
    if( nLev > nMaxLev )
        return;
    for( int i = 0; i < nLev; ++ i )
        printf( " " );
    printf( "This is written by call number %d", nLev );
    foo( ++ nLev, nMaxLev );
    printf( "This is written by call number %d", nLev );
}

void main()
{
    foo( 1, 4 );
}

[解决办法]

void print_test(int begin, int end)
{
  if (begin <= end)
  {
    printf("%d\n", begin);
    print_test(begin + 1, end);
    printf("%d\n", begin);
  }
}

热点排行