【问题标题】:Regarding the approach of a recursive to iterative past year paper question关于迭代过去一年论文问题的递归方法
【发布时间】:2021-12-31 05:29:07
【问题描述】:

如何将这个递归函数转换为迭代函数?

int sum(int n) {
if (n < 1) return 1;
return sum(n - 1) * (n - 1) + n;

我可以这样做吗? (参考下文)

int sum(int n){
    if(n<1) return 1;

    while(n >= 1){
        sum = sum(n-1) * (n-1) + n;
    }
    return sum;
}

【问题讨论】:

    标签: c recursion iteration


    【解决方案1】:

    你的答案仍然是递归形式。

    请注意您有一个基本情况,即 n = 0。这是总和的初始值。然后,您可以对 n 进行迭代,每次迭代都应用为总和给出的公式。那么,迭代案例如下所示:

    int sum_iterative (int n) {
        int sum = 1; //n = 0
        for (int i = 1; i <= n; i++) {
            sum = sum * (i-1) + i; //sum(n-1) * (n-1) + n
        }
        return sum;
    }
    

    【讨论】:

    • 为什么 sum 初始化为 1 而不是 0?
    • 这相当于递归基本情况; if (n &lt; 1) return 1;
    猜你喜欢
    • 2016-04-23
    • 2011-04-17
    • 1970-01-01
    • 2017-11-29
    • 2021-12-24
    • 2014-08-14
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多