在C中摆脱递归的惯用方法是什么?

在C中摆脱递归的惯用方法是什么?,第1张

概述假设我们有一个递归函数f,如果输入不正确,它可能会失败.只有在f运行时才能检测到输入中的错误. 在发生错误的情况下,C中突破f(),直接转换到原始调用函数的惯用方法是什么? setjmp / longjmp是通常的解决方案吗? 玩具示例: void g() { int arr[] = {1, 2, -3, 4}; int result = f(0, sizeof(arr)/size 假设我们有一个递归函数f,如果输入不正确,它可能会失败.只有在f运行时才能检测到输入中的错误.

在发生错误的情况下,C中突破f(),直接转换到原始调用函数的惯用方法是什么?

setjmp / longjmp是通常的解决方案吗?

玩具示例:

voID g() {    int arr[] = {1,2,-3,4};    int result = f(0,sizeof(arr)/sizeof(int) - 1,arr);    /* if f() was successful: */    printf("%d\n",);     /* if error occurred in f: do something else */}int f(int n,int i,int *arr) {    if (i < 0)        return n;    /*    if (arr[i] < 0) <-- "erroneous input"        break to g()    */    return f(arr[i] + n,i-1,arr);}
解决方法 选项包括:

>从f()返回状态标志,指示成功或失败.这会导致错误从错误发生的深度一次冒出一个级别,因此可能不是您想要的.请注意,如果您需要解除f()可能在每个级别声明的任何分配或释放资源,这是唯一安全的选项.>完全按照建议使用setjmp()和longjmp()来模拟抛出异常的效果并直接跳转到错误处理代码.

总结

以上是内存溢出为你收集整理的在C中摆脱递归的惯用方法是什么?全部内容,希望文章能够帮你解决在C中摆脱递归的惯用方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1214584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存