c - 使用 C 算法按顺序打印数字

标签 c algorithm recursion

示例模式已给出,

input :    16
output:    16 11 6 1 -4 1 6 11 16

如果输入是 10,那么程序应该打印输出为

10 5 0 5 10

注意:以上序列递减/递增5。

挑战在于不声明任何变量或循环。仅使用递归。

我试过下面的代码。

void sequence(int input, int base){

    input = input - (input > 0?5:-5); //main execution
    printf("input:%d\n",input);
    if(input == base)return;
    sequence(input,base);
}

//例如。 input and base(initial Value) 为16。上述方法递归自身直到input = base。

我最多可以打印这个序列(粗体)

16 11 6 1 -4 1 6 11 16

如何完成序列。在上面的方法中,在主执行行中,我需要检查条件为 input = input - (input < 0?5:-5);打印剩余的序列。但是我不确定在没有任何变量或循环的情况下如何做到这一点。是否有可用的算法或任何其他更好的解决方案。

最佳答案

我的评论的一些示例代码,如果它不必严格左递归或右递归,它将匹配:

void sequence(int n)
{
    printf("%d ", n);
    if (n > 0)
    {
        sequence(n-5);
        printf("%d ", n);
    }
}

补充说明:

1.) 这似乎与函数式编程有关,其中一个关键概念是您永远不能分配一个变量……看看这里是如何避免的。 (严格来说,由于 printf 的副作用,它不起作用)

2.) 它不是严格的左递归或右递归(意味着递归发生在求值的中间),因此它不能轻易地转换为迭代的东西。

关于c - 使用 C 算法按顺序打印数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32677829/

相关文章:

algorithm - throttle 请求的速率限制算法

c - 实现 atoi - 递增变量 j 时出现段错误

algorithm - 获得所有组合的最有效方法是什么?

c - 循环超过一百万的奇怪行为

c - 交叉编译时PIC/non-PIC代码错误

c - 将数组从函数传递到 main

c++ - 二叉搜索树中的双重删除(?)

c - 在需要无符号字符指针的方法中传递整数地址

java - 是什么导致了这个 StackOverflowError?

Sql Select 使用 CTE 对递归数据进行排序