C中的递归函数(序列)

时间:2017-12-12 13:29:57

标签: c function

我需要编写一个递归函数,从用户那里接收一个数字并从该数字打印一个序列,直到1,然后从1打印到该数字。

  

例如:
  编号:5
  输出:5 4 3 2 1 2 3 4 5

我不能两次调用该函数。

基本上我只是研究了递归函数,所以我对它不太了解。

我知道暂停状况(if,但不确定这是否是名字) 所以 if(number == 1) 会让我直到1,这还不够好。

希望有线索而不是解决方案。

5 个答案:

答案 0 :(得分:3)

递归函数算法:

输入:要打印序列的数字,请说n(假设1是正数> = 1)。

  1. 打印号码return
  2. 检查号码是否等于n-1。如果是n,则继续执行下一步。
  3. 使用参数print递归调用函数。
  4. 递归通话后打印号码for(i=1;i<=n/2;i++) { if((n%i)==0)
  5. 递归调用后的n会在展开堆栈时以相反的顺序给出序列。

答案 1 :(得分:1)

如果num是唯一参数,请使用num == 1作为基本案例。

在递归调用之前和之后

Print num。递归调用使用num - 1

答案 2 :(得分:0)

想想你所知道的以及你需要什么。

  1. 您有输入号码(例如5)
  2. 这意味着你知道你需要打印多少次(5,4,3,2,1,2,3,4,5 - 即5 * 2-1 = 9)
  3. 这意味着通过了解调用函数的次数并了解输入,您可以轻松计算输出。
  4. 因此,调用具有结束条件(迭代次数)和迭代计数器的递归函数可以解决它。
  5. 更简单的解决方案(一个参数)就是:

    • 打印输入
    • 使用input-1
    • 递归调用
    • 再次打印输入
    • 这使您可以在开头和时间打印当前号码。结束,然后进入“内部”并在第二个位置(从开始和结束)打印下一个数字(number-1),依此类推......
    • 注意:您需要有一个条件,否则这将永远不会结束。想想你的最终状况应该是什么......

答案 3 :(得分:0)

你在这里。

#include <stdio.h>

void count(unsigned int n)
{
    if (n)
    {
        printf("%u ", n);
        count(--n);
        if (n) printf("%u ", ++n);
    }
}

int main(void) 
{
    while ( 1 )
    {
        printf( "Enter a non-negative number (0 - exit): " );

        unsigned int n;

        if ( scanf( "%u", &n ) != 1 || n == 0 ) break;

        putchar( '\n' );
        count( n );
        putchar( '\n' );
    }

    return 0;
}

程序输出可能看起来像

Enter a non-negative number (0 - exit): 10

10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10 
Enter a non-negative number (0 - exit): 5

5 4 3 2 1 2 3 4 5 
Enter a non-negative number (0 - exit): 0

答案 4 :(得分:0)

我觉得有点愚蠢,我在我自己的递归函数上做了很多,从n到1或从1到n打印..但是现在我真的知道订单的含义是什么&amp;通话结束后。

void numToNum(int num) {
    if (num == 1) 
        printf("%d \n", num);
    else{
    printf("%d \n", num);
    numToNum(num - 1);
    printf("%d \n", num);
    }
}