iPh*_*Guy 3 c algorithm recursion
给出样本模式,
input : 16
output: 16 11 6 1 -4 1 6 11 16
Run Code Online (Sandbox Code Playgroud)
如果输入为10,则程序应将输出打印为
10 5 0 5 10
Run Code Online (Sandbox Code Playgroud)
注意:上述序列递减/递增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);
}
Run Code Online (Sandbox Code Playgroud)
//例如.输入和基数(初始值)为16.上述方法递归直到input = base.
我可以打印到这个序列(粗体)
16 11 6 1 -4 1 6 11 16
如何完成序列.在上述方法中,在主执行行中,我需要检查条件input = input - (input < 0?5:-5);以打印剩余序列.但我不知道如何在没有任何变量或循环的情况下做到这一点.有没有可用的算法或任何其他更好的解决方案.
小智 9
我的评论的一些示例代码,如果它不必严格左或右递归,它将匹配:
void sequence(int n)
{
printf("%d ", n);
if (n > 0)
{
sequence(n-5);
printf("%d ", n);
}
}
Run Code Online (Sandbox Code Playgroud)
附加说明:
1.)这似乎是关于函数式编程,其中一个关键概念是你永远不能分配一个变量......看看它是如何避免的.(严格来说,由于printf副作用,它不起作用)
2.)它不是严格的左递归或右递归(意味着递归发生在评估的中间),因此它不能轻易转换为迭代的东西.
| 归档时间: |
|
| 查看次数: |
2604 次 |
| 最近记录: |