iT邦幫忙

0

這C語言的程式碼那些地方出錯?(重發的)

最近看到了本資料結構的書有個範例:魔術方陣,在某格放1,然後往左上移動,以遞增的順序將數值放入格子,格子像卡諾圖一樣上下左右相連,如果已經有數值就往下移動並填入數值。

書上範例用for迴圈,我想說用遞迴的方式,我的程式碼:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int size;
int recursion(int [][size],int,int,int,int);
int main()
{
    int i,j,row,col,count;
    printf("Enter the size of the square:");
    scanf("%d",&size);
    if(size == 5 || size == 7 || size == 9)
    {
        int arr[size][size];
        for(i = 0 ; i < size ; i ++)
        {
            for(j = 0 ; j < size ; j++)
            {
                arr[i][j] = 0;
            }
        }
        srand(time(NULL));
        i = rand() % size;
        j = rand() % size;
        arr[i][j] = 1;
        recursion(arr[size][size],size*size,i,j,2);
        for(i = 0 ; i < size ; i ++)
        {
            for(j = 0 ; j < size ; j++)
            {
                printf("%2d ",arr[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}
int recursion(int arr[][size],int num,int i,int j,int count)
{
    int row,col;
    if(count <= num)
    {
        row = (i - 1 < 0) ? (size - 1) : (i - 1);
        col = (j - 1 < 0) ? (size - 1) : (j - 1);
        if(arr[row][col] != 0)
        {
            i = (++i) % size;
        }
        else
        {
            i = row;
            j = col;
        }
        arr[i][j] = count;
        return recursion(arr[size][size],num-1,i,j,count++);
    }
}

我宣告一個size來輸入方陣大小,如果size是5、7、9,就執行否則離開,數字1用亂數找一個格子隨機放入,其餘的要用遞迴,但無法執行,不知是我的recursion函式有問題,還是二維陣列傳遞有問題?

ccchiou iT邦新手 5 級 ‧ 2020-10-05 09:59:45 檢舉
最內層的if寫錯了, row, col的值沒有回給i與j
vuj8104 iT邦新手 5 級 ‧ 2020-10-06 12:04:20 檢舉
好的謝謝你,問題已經解決了

尚未有邦友回答

立即登入回答