簡體   English   中英

如何迭代計算這個序列?

[英]How to calculate this sequence iteratively?

我想迭代地計算這個序列。

A(0,j)=j+1
A(i,0)=A(i-1,0)
A(i,j)=A(i-1,A(i,j-1))

這是我的嘗試

    public function calculsuite1Action($i,$j)
{
    $A = array();
    for ($k = 0; $k <= $i * $i * $i + $j; $k++) {
        $A[0][$k] = $k + 1;
    }
    for ($c = 1; $c <= $i; $c++) {
        for ($k = 0; $k <= $i * $i * $i + $j - $c; $k++) {
            if ($k == 0) {
                $A[$c][$k] = $A[$c - 1][1];
            } else {
                $A[$c][$k] = $A[$c - 1][$A[$c][$k - 1]];
            }
            if ($c == $i && $k == $j) {
                return $A[$i][$j];
            }

        }
    }
}

我正在嘗試使用PHP或任何其他編程語言找到解決方案。 我怎樣才能做到這一點?

我試過尋找前幾個條目的模式。 如果我沒有犯任何錯誤,那么序列非常簡單。 歸結為

A(i, j) = j+1

剛剛使用這個JavaScript程序來驗證我沒有犯任何錯誤

 for (i = 0; i < 5; i++){ for (j = 0; j < 5; j++){ console.log("A("+i+", "+j+") = "+calc(i,j)); } } function calc(i, j){ if(i==0) return j+1; else if(j == 0) return calc(i-1, 0); else return calc(i-1, calc(i, j-1)); } 

這是一個堆棧實現。 請參閱此處以獲取有關如何轉換遞歸的說明。

JavaScript代碼:

 /** * A(0,j)=j+1 * A(i,0)=A(i-1,0) * A(i,j)=A(i-1,A(i,j-1)) ***/ // Recursive function f(i,j){ if (i == 0) return j+1 else if (j == 0) return f(i-1,0) else return f(i-1,f(i,j-1)) } // Iterative function iterative(_i,_j){ let result = undefined; let stack = [[f, [_i, _j]]]; function g(i){ let Aij_1 = result; stack.push([f, [i-1, Aij_1]]); } function f(i, j){ if (!i){ result = j + 1; } else if (!j){ stack.push([f, [i-1, 0]]); } else { stack.push([g, [i]]); stack.push([f, [i, j-1]]); } } while (stack.length){ [func, params] = stack.pop(); func.apply(func, params); } return result; } for (let i=0; i<11; i++){ for (let j=0; j<11; j++) // Log both iterative and recursive results for comparison console.log( '(' + i + ', ' + j + ') => ' + JSON.stringify([iterative(i,j), f(i,j)]) ); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM