【发布时间】:2015-09-20 09:29:24
【问题描述】:
给出了示例模式,
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 和 base(initial Value) 为 16。上述方法自身递归,直到 input = base。
我可以打印到这个序列(粗体)
16 11 6 1 -4 1 6 11 16
如何完成序列。在上述方法中,在主执行行中,我需要检查条件为input = input - (input < 0?5:-5); 以打印剩余的序列。但我不确定如何在没有任何变量或循环的情况下做到这一点。是否有任何可用的算法或任何其他更好的解决方案。
【问题讨论】:
-
需要左递归还是右递归?如果没有,只需在停止递归的测试后再次输出......顺便说一句,你永远不需要
base参数......到达递归的顶部框架就足够了。 -
使用这些限制是不可能的。你必须使用变量,至少是“参数”。
-
@Olaf,这可能就是它说不要声明变量的原因。我也不会添加任何 mutate 。显然,目标是以“功能性”的方式做到这一点。我希望在这里展示解决方案不会破坏学习体验...
-
@FelixPalmen:没有声明参数? (顺便说一句。OP 很可能混淆了声明和定义;我没有看到仅仅声明一个变量有问题,因为在定义它之前你不能使用它......)
-
@Olaf 函数声明不是变量声明。是的,声明一个未在任何地方定义的变量不会干扰代码的功能性质,但这只是无用的——考虑一下这里真的很挑剔,对不起;)跨度>