return 语句在这里的意义是什么?

问题描述

这里的return语句有什么意义? [问题:N_queen 问题] 当我不使用 return 调用时,该函数可以工作。但是当我在递归调用中使用 return 语句时它不起作用[我在代码中提到过]。请解释一下,如果可能,您能否通过跟踪调用(即控件如何移动)来解释?

#include <iostream>
#include <bitset>
using namespace std;

bitset<30> cols,diag1,diag2; //all zeros

void Nqueen(int n,int row,int& ans){
    if(row==n){
        ans++;
        return;
    }
    //moving across each column
    //k is iterator for columns
    for(int k=0;k<n;k++){
        if(!cols[k] && !diag1[row+k] && !diag2[row-k+n-1]){
            cols[k]=diag1[row+k]=diag2[row-k+n-1]=1;
            Nqueen(n,row+1,ans);   //this recursion call I am talking about.
            
            // if I comment out the above recursion call and instead write
            // return (Nqueen(n,rows+1,ans));
            // It outputs 0 for any input n

            cols[k]=diag1[row+k]=diag2[row-k+n-1]=0; //backtracking
        }
    }
} 
    
int main(){
    int n; cin>>n; //size of board(square matrix)
    int ans=0;
    Nqueen(n,ans);//0 is for 1st row
    cout<<ans<<endl;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)