使用C – 算法按顺序打印数字
发布时间:2020-12-16 10:11:56 所属栏目:百科 来源:网络整理
导读:给出样本模式, input : 16output: 16 11 6 1 -4 1 6 11 16 如果输入为10,则程序应将输出打印为 10 5 0 5 10 注意:上述序列递减/递增5. 挑战是不要声明任何变量或循环.仅使用递归. 我尝试过以下代码. void sequence(int input,int base){ input = input - (i
给出样本模式,
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:%dn",input); if(input == base)return; sequence(input,base); } //例如.输入和基数(初始值)为16.上述方法递归直到input = base. 我可以打印到这个序列(粗体) 16 11 6 1 -4 1 6 11 16 如何完成序列.在上述方法中,在主执行行中,我需要检查条件为输入=输入 – (输入< 0?5:-5);打印剩余的序列.但我不知道如何在没有任何变量或循环的情况下做到这一点.有没有可用的算法或任何其他更好的解决方案. 解决方法
我的评论的一些示例代码,如果它不必严格左或右递归,它将匹配:
void sequence(int n) { printf("%d ",n); if (n > 0) { sequence(n-5); printf("%d ",n); } } 附加说明: 1.)这似乎是关于函数式编程,其中一个关键概念是你永远不能分配一个变量……看看它是如何避免的. (严格来说,由于printf副作用,它不起作用) 2.)它不是严格的左递归或右递归(意味着递归发生在评估的中间),因此它不能轻易转换为迭代的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |