示例模式已给出,
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/